iOS 5 でポップオーバーにデータを渡すときに奇妙な動作に気付きました。PopoversviewDidLoadメソッドが呼び出される前prepareForSegueに呼び出されます。
Storyboard では、セグエが のボタンを に接続しますFirstViewController。PopoverViewControllerこれは、Navigation Controller に埋め込まれています。
テストのために、2 つのメソッドがログに記録されます。
/* 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
これは奇妙で、 で使用できる Popover にデータを渡すのが難しくなりますviewDidLoad。これに対する解決策はありますか?