OStack程序员社区-中国程序员成长平台

标题: iphone - Storyboard - initWithCoder 被调用两次 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 21:44
标题: iphone - Storyboard - initWithCoder 被调用两次

我想知道的重要一点是我正在使用 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-推荐答案


在使用 Storyboard的应用程序中,在应用程序启动时,UIKit 在信息列表中查找 the UIMainStoryboardFile key .如果设置了 UIKit 引用该 Storyboard并使用 -[UIStoryboard instantiateInitialViewController] 创建一个默认的 Root View Controller 以附加到窗口。

UIKit 正在这样做,然后在 -didFinishLaunchingWithOptions: 中,您还创建了 View Controller 的新实例。这就是它被实例化两次的原因。

如果您想完全自定义此过程,并且看起来确实如此,那么您可能不希望 UIKit 代表您执行这些默认操作。您可以简单地从 info.plist 中删除 UIMainStoryboardFile 键,并在覆盖 -didFinishLaunchingWithOptions: 时:

  1. 创建一个窗口
  2. 获取 Storyboard
  3. 从 Storyboard 中实例化 View Controller 。
  4. 设置窗口的 Root View Controller 。
  5. 使窗口键可见。

关于iphone - Storyboard - initWithCoder 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285333/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4