it possible to Pass Data with popViewControllerAnimated?

Spread the love

Question Description

I came across an interesting problem, i have main ViewController let’s call him MainVC with navigationController and i am doing performSegueWithIdentifier from him to Mine second ViewController let’s call him SecVC. so when i am trying to do the popViewControllerAnimated i want to pass some data from the SecVC to the MainVc.. i know i can do it with appDelegate Param or with singletons class but my question is : can i do it with more Elegant solution? like i use prepareForSegue and use local parmeters..

Thank you…

Practice As Follows

The best way to do it is by using a delegate.

//SecVCDelegate.h

#import 

@protocol SecVSDelegate 

@optional
- (void)secVCDidDismisWithData:(NSObject*)data;
@end

//SecVC.h

#import 
#import "SecVSDelegate.h"

@interface SecVC : UIViewController

/** Returns the delegate */
@property (nonatomic, assign)   id delegate;

@end

//SecVC.M

...

- (void) dealloc
{
...
delegate = nil
...
}

When ever you popViewControllerAnimated, right after it (or before it) you do this

if(_delegate && [_delegate respondsToSelector:@selector(secVCDidDismisWithData:)])
{
[_delegate secVCDidDismisWithData:myDataObject];
}

And in the MainVC you must be certain that you implement the delegate function
//MainVC.m

- (void)secVCDidDismisWithData
{
//do whatever you want with the data
}

To avoid any warnings you must tell that the MainVC class implements the delegate like this:

//MainVC.h

#import "SecVCDelegate.h"
...
@interface MainVC : UIViewController 
...
secVCInstance.delegate = self;
[self.navigationController pushViewController:secVCInstance]; 
...

Leave a Comment