【发布时间】:2013-02-25 08:14:53
【问题描述】:
我注意到在 iOS 5 中向弹出框传递数据时出现了一些奇怪的行为。在调用 prepareForSegue 之前调用了弹出框 viewDidLoad 方法:
在 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 5 下PopoverViewController 的viewDidLoad 在prepareForSegue 之前被调用:
2013-02-25 09:05:28.723 PopoverViewController: viewDidLoad
2013-02-25 09:05:28.726 FirstViewController: prepareForSegue
这很奇怪,很难将数据传递给可在viewDidLoad 中使用的弹出框。有什么解决办法吗?
【问题讨论】:
-
解决方案是:你必须设置一个属性,然后才能在 viewDidLoad 中使用它。
标签: ios ipad ios5 uipopovercontroller uistoryboardsegue