5

我正在为我的应用程序实施超时操作。我提到这个stackoverflow线程 iOS在不活动期(没有用户交互)之后执行操作并且确实遵循完全相同的方法但是当我的应用程序即将转换到新的视图控制器时崩溃在这里

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

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

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

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

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在包中加载 NIB”

我没有与要加载的此控制器关联的 .xib 文件。我只有 abc.h 和 abc.m 文件。但是在我的故事板文件中,我有一堆视图控制器,在那里,我将其中一个视图控制器的类指定为“abc”。还不够吗?或者,加载我的视图控制器的最佳方式是什么?使用转场?

4

1 回答 1

6

关于你的例外 - 你的故事板可能没有复制到主包中。看到这个

此外,该方法instantiateViewControllerWithIdentifier使用Storyboard IDStoryboard 本身中定义的名称,而不是视图控制器的名称。有关如何从情节提要中实例化特定视图控制器的更多信息,请参阅instantiateInitialViewController内容,或者如果要初始化初始视图控制器(情节提要中箭头所指的那个),请使用。

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

于 2013-07-15T18:19:50.010 回答