I have masterViewController and detailViewController. Masterview pushes detailView. When going back to masteViewController I want to update the foo value. But I only get NULL from nslog. How can I set the parenteViewContrller.foo value to @"bar" when navigationback?
masterViewController.h
NSString *foo;
-(void)setFoo:(NSString *)fooValue
@property(nonatomic, retain) NSString *foo;
masterViewController.m
@synthesize foo;
-(void)setFoo:(NSString *)fooValue{
NSLog(@"updated foo:%@", fooValue);
}
detailViewController.m
-(void)goBack{
[self.navigationController.parentViewController setValue:@"bar" forKey:@"foo"];
[self.navigationController popViewControllerAnimated:YES];
}
[UIViewController parentViewController]
will not return what you are expecting from iOS 5 onward, instead you should be using [UIViewController presentingViewController]
If you are just targeting iOS 5, it is easy enough to start using presentingViewController
instead, but if not I would advise that you manually pass your UIViewController
on:
// DetailViewController.h
@class MasterViewController;
@interface DetailViewController : UIViewController
@property (assign, nonatomic) MasterViewController *masterViewController;
@end
// DetailViewController.m
#import "DetailViewController.h"
#import "MasterViewController.h"
@implementation DetailViewController
- (void)goBack {
[self.masterViewController setFoo:@"bar"];
// dismiss this view controller
}
@end
// MasterViewController.h
@interface MasterViewController : UIViewController
- (void)setFoo:(NSString *)bar;
@end
// MasterViewController.m
#import "MasterViewController.h"
#import "DetailViewController.h"
@implementation MasterViewController
- (void)goForward {
DetailViewController *detailViewController = ...;
[detailViewController setMasterViewController:self];
// present this view controller
}
@end