【问题标题】:ViewController is loading a nonexistant nibViewController 正在加载一个不存在的笔尖
【发布时间】:2013-12-15 22:15:54
【问题描述】:

之前我创建了一个名为FTIBTagsActivityViewController 的新文件并包含一个笔尖。在玩了一段时间后,我决定将用户界面移到我的主故事板上。所以我删除了 .xib 文件,在我的主故事板中重新创建了 UI,为界面赋予了 FTIBTagsActivityViewController 类,并尝试使用。

但是,每当我尝试展示这个视图控制器时:

- (UIViewController *) activityViewController
{
    FTIBTagsActivityViewController *tavc = [[FTIBTagsActivityViewController alloc] init];
    tavc.tags = tagsSplit;
    return tavc;
}

(此代码返回给 UIActivityViewController,然后它会尝试以模态方式呈现它)。

我的应用程序因此崩溃。

2013-12-15 18:07:55.982 Mignori[3855:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "FTIBTagsActivityViewController" nib but the view outlet was not set.'

它清楚地表明它有一个名为FTIBTagsActivityViewController 的笔尖,但这有两个奇怪的问题:

  • 该 xib 不再存在,其 UI 已移至我的故事板。
  • 实际上,我删除了所有引用 FTIBTagsActivityViewController 的 UI 元素 - 也就是说,为了进行测试,我从情节提要中删除了界面,但我的应用仍然因这条消息而崩溃。

我查看了我的项目目录,没有 FTIBTagsActivityViewController.xib。它实际上是在成功加载一个不存在的 xib。

我已尝试清理我的项目并再次编译,但此错误仍然存​​在。帮忙?

【问题讨论】:

  • 你试过删除 ~/Library/Developer/Xcode/DerivedData 目录吗?
  • 您可能需要清理和构建,重置您的模拟器并删除派生的数据文件夹,然后才能使用。我有一个类似的问题,我以同样的方式解决了。 (我假设您没有在 init 方法中引用笔尖。)
  • 谢谢大家,我正在尝试您的建议。但是,是的,我加倍检查,并没有以暗示它来自笔尖的方式引用我的视图控制器。编辑 - 删除派生的数据目录并进行干净的构建并没有成功。看来我要重启手机了……
  • 好的,伙计们,设法解决了它。我不太确定做了什么,所以我会写下我的答案,添加你的步骤和所有内容。现在我的应用程序由于不同的原因崩溃了,哈哈。但我想这是进步。

标签: ios objective-c uiviewcontroller xib uistoryboard


【解决方案1】:

这么奇怪的问题,我按照以下步骤让它工作:

  1. 按照 Rocky 的建议,清空了 Derived Data 文件夹(~/Library/Developer/Xcode/DerivedData 目录?)。
  2. 按照 Aaron Brager 的建议清理了项目。
  3. 从我的手机中删除了该应用程序。
  4. 重启手机。
  5. 再次运行项目。

【讨论】:

  • 很高兴它成功了……不要忘记提交错误报告,因为您有崩溃日志:)
【解决方案2】:
  1. 使用 [UIStoryboard storyboardWithName: @"yourstoryboardname" bundle: [NSBundle mainBundle]] 创建一个 uistoryboard。

  2. 确保您的视图控制器在情节提要中有一个标识符,并将其设置为正确的类

  3. 在 1 处创建的情节提要上调用 instantiateViewControllerWithIdentifuer: @"yourId"]。

【讨论】:

    【解决方案3】:

    使用 UIstoryboard 类加载视图控制器。使用 alloc init 加载视图控制器将使其搜索操作系统不存在的 anib。那么不实现loadView就没有view。

    【讨论】:

    • 我认为我的新问题(尽管不相关的问题)正是因为我正在执行 alloc init 而引起的。使用 UIStoryboard 加载 UIViewController 的正确方法是什么?当我键入代码并按 esc 时,我似乎找不到正确的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    相关资源
    最近更新 更多