ViewController 正在加载一个不存在的笔尖

Posted

技术标签:

【中文标题】ViewController 正在加载一个不存在的笔尖【英文标题】:ViewController is loading a nonexistant nib 【发布时间】: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 方法中引用笔尖。) 谢谢大家,我正在尝试您的建议。但是,是的,我加倍检查,并没有以暗示它来自笔尖的方式引用我的视图控制器。编辑 - 删除派生的数据目录并进行干净的构建并没有成功。看来我要重启手机了…… 好的,伙计们,设法解决了它。我不太确定做了什么,所以我会写下我的答案,添加你的步骤和所有内容。现在我的应用程序由于不同的原因崩溃了,哈哈。但我想这是进步。 【参考方案1】:

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

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

【讨论】:

很高兴它成功了……不要忘记提交错误报告,因为您有崩溃日志:)【参考方案2】:

    使用 [UIStoryboard storyboardWithName: @"yourstoryboardname" bundle: [NSBundle mainBundle]] 创建一个 uistoryboard。

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

我认为我的新问题(尽管不相关的问题)正是因为我正在执行 alloc init 而引起的。使用 UIStoryboard 加载 UIViewController 的正确方法是什么?当我键入代码并按 esc 时,我似乎找不到正确的方法。

以上是关于ViewController 正在加载一个不存在的笔尖的主要内容,如果未能解决你的问题,请参考以下文章

带有条件 ViewController 的情节提要

整理ViewController的生命周期和加载过程

Swift:PrepareForSegue 正在运行但未加载 ViewController

在加载 ViewController 之前加载 MapView

如何从本地 JSON 文件将数据加载到 ViewController [关闭]

Swift:如何在实例化 viewController 之前加载 Firebase 数据?