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
的笔尖,但这有两个奇怪的问题:
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 正在加载一个不存在的笔尖的主要内容,如果未能解决你的问题,请参考以下文章
Swift:PrepareForSegue 正在运行但未加载 ViewController
在加载 ViewController 之前加载 MapView