我想知道的重要一点是我正在使用 Storyboard。我在 didFinishLaunchingWithOptions 中执行以下操作:
UIStoryboard *sb = [UIStoryboard storyboardWithName"Storyboard" bundle:nil];
FirstView *mvc = [sb instantiateViewControllerWithIdentifier"FirstView"];
SecondView *tvc = [sb instantiateViewControllerWithIdentifier"SecondView"];
NSArray* controllers = [NSArray arrayWithObjects:[self addNavigationToViewController:mvc], [self addNavigationToViewController:tvc], nil];
// add controllers to a table view
UITabBarController *tb = [[UITabBarController alloc] init];
[tb setViewControllers:controllers];
[self.window setRootViewController:tb];
addNavigationToViewController 是我用来在 UINavigationController 中嵌入 View Controller 的方法
当我运行这个应用程序时,FirstView 中的 initWithCoder 会被调用两次。我找到了原因,但我不知道如何正确处理。
基本上,FirstView 被初始化一次,因为它是 Initial Scene(属性检查器中有一个复选标记设置 View “是初始 View Controller ”),第二次: p>
FirstView *mvc = [sb instantiateViewControllerWithIdentifier"FirstView"];
如果我取消选中 Initial Scene,它会提示“可能未设置指定的入口点”。
我做错了什么,但我不知道它是什么。
任何提示将不胜感激。
Best Answer-推荐答案 strong>
在使用 Storyboard的应用程序中,在应用程序启动时,UIKit 在信息列表中查找 the UIMainStoryboardFile key .如果设置了 UIKit 引用该 Storyboard并使用 -[UIStoryboard instantiateInitialViewController] 创建一个默认的 Root View Controller 以附加到窗口。
UIKit 正在这样做,然后在 -didFinishLaunchingWithOptions: 中,您还创建了 View Controller 的新实例。这就是它被实例化两次的原因。
如果您想完全自定义此过程,并且看起来确实如此,那么您可能不希望 UIKit 代表您执行这些默认操作。您可以简单地从 info.plist 中删除 UIMainStoryboardFile 键,并在覆盖 -didFinishLaunchingWithOptions: 时:
- 创建一个窗口
- 获取 Storyboard
- 从 Storyboard 中实例化 View Controller 。
- 设置窗口的 Root View Controller 。
- 使窗口键可见。
关于iphone - Storyboard - initWithCoder 被调用两次,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/11285333/
|