ios - 从 Storyboard 中实例化 View Controller 时应用程序崩溃

标签 ios objective-c uiviewcontroller uistoryboard

我正在为我的应用实现超时操作。我提到了这个 stackoverflow 线程 iOS perform action after period of inactivity (no user interaction)并且确实遵循了完全相同的方法,但是我的应用程序在即将转换到此处的新 View Controller 时崩溃了

UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL];

UIViewController *cont = [myStoryboard instantiateViewControllerWithIdentifier:@"abc"];

我在 Storyboard ID 下的 Storyboard文件中给出了名称 abc。还有其他方法可以加载 View Controller 吗?这有什么问题?为什么我的应用程序崩溃了?

这是来自控制台的崩溃消息:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle"

我没有与我要加载的 Controller 关联的 .xib 文件。我只有 abc.h 和 abc.m 文件。但是在我的 Storyboard文件中,我有一堆 View Controller ,并且在那里,我将其中一个 View Controller 的类指定为“abc”。还不够吗?或者,加载我的 View Controller 的最佳方式是什么?使用 segue ?

最佳答案

关于您的异常 - 您的 Storyboard 可能未复制到主包中。参见 this .

此外,方法 instantiateViewControllerWithIdentifier 使用 Storyboard 本身定义的 Storyboard ID 而不是 View Controller 的名称。参见 this有关如何从 Storyboard 中实例化特定 View Controller 的更多信息,或者如果您想初始化初始 View Controller ( Storyboard 中箭头指向的 View Controller ),请使用 instantiateInitialViewController

编辑:异常是由于 iOS 中的一个错误而引发的,其中带有名称修饰符的 Storyboard ,例如 Storyboard_ipadStoryboard_iphone 导致内部 iOS 机制发生困惑 [UIStoryboard storyboardWithName:bundle:]。解决方案是避免使用此命名约定,并可能编写一个辅助函数来通过检查当前设备习惯用法来选择要加载的 Storyboard名称。

关于ios - 从 Storyboard 中实例化 View Controller 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660692/

相关文章:

ios - 如何在不修改每个 View Controller 文件的情况下支持 iOS 5 和 6 中的方向?

ios - Xamarin iOS : Refresh page from viewModel

ios - 以编程方式在 iOS 中设置全屏模式

iPhone session - 不活动超时

objective-c - 当 Scrollview 的 subview 时 UITableView 不填充

iOS-ntp 返回与设备相同的值

ios - self.parentViewController 记录 UINavigationController,但表现得像 UIViewController

ios - 如何使用 Sentry 获取 IOS SDK 开发的崩溃日志

ios - 嵌套推送动画可能导致导航栏损坏错误

ios - View 堆栈、UIViewController 和旋转