在 iOS 5 中将数据传递给 popover 时,我注意到一些奇怪的行为。 PopoversviewDidLoad
方法在调用之前prepareForSegue
调用:
在 Storyboard 中,segue 连接到的按钮FirstViewController
,PopoverViewController
该按钮嵌入在导航控制器中。
为了测试,记录了两种方法:
/* FirstViewController.m */
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showPopover"]) {
NSLog(@"FirstViewController: prepareForSegue");
UINavigationController *navigationController = segue.destinationViewController;
PopoverViewController *popoverVC = (PopoverViewController *)navigationController.topViewController;
popoverVC.myProperty = @"Data to be passed";
}
}
在另一个 ViewController 中:
/* PopoverViewController.m */
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"PopoverViewController: viewDidLoad");
}
在 iOS 6 下,行为符合预期:
2013-02-25 09:03:53.747 FirstViewController: prepareForSegue
2013-02-25 09:03:53.751 PopoverViewController: viewDidLoad
在 iOS 5viewDidLoad
下PopoverViewController
被调用过prepareForSegue
:
2013-02-25 09:05:28.723 PopoverViewController: viewDidLoad
2013-02-25 09:05:28.726 FirstViewController: prepareForSegue
这很奇怪,并且很难将数据传递给可用于viewDidLoad
. 有什么解决办法吗?