从故事板实例化视图控制器时,应用程序崩溃

时间:2013-07-15 17:56:02

标签: ios objective-c uiviewcontroller uistoryboard

我正在为我的应用实施超时操作。我引用了这个stackoverflow线程iOS perform action after period of inactivity (no user interaction),并且确实遵循了完全相同的方法,但我的应用程序崩溃时它将要转移到这里的新视图控制器

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

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

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

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

  

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

我没有与此控制器关联的.xib文件我正在尝试加载。我只有abc.h和abc.m文件。但是在我的storyboard文件中,我有一堆视图控制器,在那里,我已经将其中一个视图控制器的类指定为“abc”。还不够吗?否则,加载视图控制器的最佳方法是什么?使用segue?

1 个答案:

答案 0 :(得分:5)

关于您的例外 - 您的故事板可能未复制到主要包。请参阅this

此外,方法instantiateViewControllerWithIdentifier使用Storyboard本身中定义的Storyboard ID而不是视图控制器的名称。有关如何从故事板实例化特定视图控制器的更多信息,请参阅this;如果要初始化初始视图控制器(故事板中箭头指向的控制器),请使用instantiateInitialViewController )。

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