【问题标题】:App crashes when instantiating view controller from storyboard从故事板实例化视图控制器时应用程序崩溃
【发布时间】:2013-07-13 16:45:37
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

标签: ios objective-c uiviewcontroller uistoryboard


【解决方案1】:

关于您的例外 - 您的故事板可能没有复制到主包中。见this

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

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

【讨论】:

  • 我的故事板被复制到主包中。我刚刚又验证了一遍。
  • 1.尝试清理您的项目和项目构建目录(通过在清理时按 alt)以确保复制情节提要。 2. 只是为了好玩——你是否也有一个 MainStoryboard~ipad.storyboard 文件?
  • 我尝试清洁它并没有帮助。是的,我有 MainStoryboard_iPhone 和 MainStoryboard_iPad 故事板文件。
  • 您能否尝试删除MainStoryboard_iPad 文件,并制作一个MainStoryboard 文件?故事板文件中的iPhone/iPad 命名方案存在一个错误(仍然存在)。
猜你喜欢
  • 2012-06-10
  • 2018-01-25
  • 1970-01-01
  • 2017-11-22
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
相关资源
最近更新 更多