这是适用于 iOS 7 的 Xcode 5 中的错误吗?

Posted

技术标签:

【中文标题】这是适用于 iOS 7 的 Xcode 5 中的错误吗?【英文标题】:Is this a bug in Xcode 5 for iOS 7? 【发布时间】:2014-02-02 22:53:06 【问题描述】:
    创建一个新的单视图项目(例如,“测试”) 在主情节提要中,创建两个标题为 OneTwo 的视图控制器 - 使 One 成为初始视图控制器 将标签One 放在视图控制器One 的内容中,将标签Two 放在Two

    TestViewController.mviewDidLoad 中包含以下内容:

    // instantiate the new view controller
    UIStoryboard *storyboard = self.storyboard;
    TestViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"Two"];
    // Change the view
    viewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentViewController:viewController animated:YES completion:nil];
    

    保存、构建并运行。

我一直收到Storyboard does not contain view controller 'Two' 种类的错误。使用断点,我发现问题出在实例化步骤。然而,上面的代码直接取自 Apple 的 View Controller Programming Guide。

我浏览了这个站点,发现很多人在以编程方式实例化视图控制器时遇到问题。有什么明确的解决办法吗?

【问题讨论】:

当您说标题时,您的意思是 Storyboard ID,因为这是由 instantiateViewControllerWithIdentifier: 使用的? 【参考方案1】:

这里没有错误——你只是在编写不合适的代码。如果你把它放在一个动作中并用一个按钮触发它,你给出的代码 sn-p 就可以正常工作,a计时器等。但是您试图在运行代码的视图控制器甚至可以显示自己的视图之前以模态方式呈现另一个视图控制器。

-viewDidLoad 在从情节提要或 .xib 文件加载视图控制器的视图时调用;这是进行任何必须推迟到视图层次结构出现之前的初始化的机会。但是,此时实际上并未显示视图。您需要等到收到-viewDidAppear 消息才能知道视图在屏幕上。因此,您可以想象,在当前视图控制器安顿下来之前尝试呈现一些 other 视图控制器并没有多大意义。

我一直收到一个错误,即 Storyboard 不包含视图控制器“两个”种类。

在这种情况下,您没有为视图控制器正确分配故事板标识符。在情节提要编辑器中选择视图控制器“Two”,然后查看身份检查器。您需要像这样设置标识符:

我浏览了这个网站,发现很多人都遇到了问题 以编程方式实例化视图控制器。有什么明确的解决办法吗?

您是否也看过他们问题的答案?这就是这个网站的运作方式——我们不仅为提出问题的人回答问题,而且还帮助将来可能有类似问题的其他人。 Identifying a UIStoryboard 是与您的问题类似的一个很好的例子,其答案可能会对您有所帮助。

【讨论】:

以上是关于这是适用于 iOS 7 的 Xcode 5 中的错误吗?的主要内容,如果未能解决你的问题,请参考以下文章

适用于 iOS 7 应用程序的 XCode 6 中的 UISplitViewController

适用于 iPad I(和 iOS 5.1.1)的 iOS 应用程序

将应用程序从适用于 iOS 10 的 xcode 7.3.1 上传到 iTunes

如何在 iOS 中添加双拇指滑块?以及为啥这个双滑块库不再适用于 xcode 7

如何使动画在 Xcode 5 iOS 7 中工作?

在 xcode5 中找不到适用于 ios 5 的情节提要 [关闭]