gpt4 book ai didi

iphone - Storyboard - initWithCoder 被调用两次

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:49:35 24 4
gpt4 key购买 nike

我想知道的重要事情是我正在使用 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(Attributes Inspector 中有一个复选标记将 View 设置为“Is initial view controller”),第二次:

FirstView *mvc = [sb instantiateViewControllerWithIdentifier:@"FirstView"];

如果我取消选中Initial Scene,它会提示“可能没有设置指定的入口点”。

我做错了什么,但我不知道它是什么。

如有任何提示,我们将不胜感激。

最佳答案

在使用 Storyboard的应用程序中,在应用程序启动时,UIKit 在信息 plist 中查找 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com