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

5
我正在为我的应用程序实现超时操作。我参考了这个stackoverflow线程iOS perform action after period of inactivity (no user interaction)并且完全按照相同的方法操作,但是当我的应用程序即将过渡到一个新的视图控制器时,它会崩溃。
UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL];

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

我已经在Storyboard文件中给了一个名称abc,作为Storyboard ID。是否还有其他加载视图控制器的方式?这种方法有什么问题?为什么我的应用程序会崩溃?

这是从控制台中的崩溃信息:

终止应用程序,原因:未捕获的异常 'NSInternalInconsistencyException',原因:'无法在包中加载NIB"

我没有将.xib文件与要加载的控制器相关联,我只有abc.h和abc.m文件。 但是在我的故事板文件中,我有许多视图控制器,并在其中指定了一个视图控制器的类名为“abc”。这不足够吗?否则,最好的加载视图控制器的方式是什么?使用segue吗?


请发布您的崩溃日志和控制台中的错误。 - Nicholas Hart
请从调试窗口中发布崩溃消息。 - apollosoftware.org
已更新帖子并附上了崩溃信息和更多详细信息。 - user1982519
请查看以下链接:https://dev59.com/im435IYBdhLWcg3w-1V_ 和 https://dev59.com/T2435IYBdhLWcg3wkBBe。 - Rakesh
1个回答

6
关于您的异常 - 您的故事板可能没有复制到主包中。请参见此处
另外,方法instantiateViewControllerWithIdentifier使用故事板本身定义的故事板ID而不是视图控制器的名称。有关如何从故事板实例化特定视图控制器的更多信息,请参见此处,或者使用instantiateInitialViewController如果您想初始化初始视图控制器(由箭头指向的那个)。
编辑:异常是由于iOS中的一个错误引起的,其中带有名称修饰符的故事板,例如Storyboard_ipadStoryboard_iphone会在[UIStoryboard storyboardWithName:bundle:]内部iOS机制中引起混淆。解决方案是避免使用这种命名约定,并可能编写一个帮助程序函数来通过检查当前设备风格选择要加载的故事板名称。

我的故事板已经复制到了主束中。我刚刚再次验证了它。 - user1982519
1
  1. 尝试清理项目和项目构建目录(按下Alt键进行清理),以确保Storyboard被复制。
  2. 只是为了好玩 - 你是否也有一个MainStoryboard〜ipad.storyboard文件?
- StatusReport
我尝试过清理它,但没有帮助。是的,我有MainStoryboard_iPhone和MainStoryboard_iPad故事板文件。 - user1982519
请尝试删除MainStoryboard_iPad文件,并创建一个单独的MainStoryboard文件。在故事板文件中,关于iPhone/iPad命名方案仍存在错误(尚未解决)。 - StatusReport

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接