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
。これに対する解決策はありますか?