经过近 2 天的时间在多台机器上尝试后,我终于解决了这个问题!我不会受挫!
我将问题追溯到对 UINavigationController 上的 setViewControllers 的调用,该调用在应用程序初始化时被调用。我总是被传递 3 个对象(导航控制器中有 3 个窗格)。即使我删除了第三个对象,如前所述,总是会传入三个对象。前两个的类类型是正确的,但第三个只是一个 UIViewController。奇怪的是,这个视图控制器有一个 nibName,它对应于我之前删除的目标文件和 Xib 文件。当然,当在这个无聊的 UIViewController 上调用视图时,它会崩溃,因为相应的 nib 显然已被删除。请记住,使用 grep 在我的目录中找不到此对象或 Xib 的文本名称,
所以,我认为应用程序可能没有被正确清理。我仔细检查了这个。我什至验证了我的工作区设置是正确的(文件->项目设置->高级)。该应用程序确实每次都重新编译。
其次,我开始想,也许这个对象是通过其他方式设置的。向后工作,我添加了一些断点,并发现在父 UINavigationController 上调用了 initWithCoder——这最终正在调用对象上的 setViewControllers 并分配三个视图控制器(其中一个是有问题的)。我可以很容易地从调用堆栈中看到正在加载的 Nib 文件正在反序列化一些令人反感的东西。
所以,我开始深入研究我的 Xib 文件。当然,对象名称不在文件中(正如预期的那样,因为 grep 没有找到任何东西)。我删除并重新创建了包含我的根 UINavigationController 的 Xib 部分。这最终改变了 Xib 文件中的 Object ID 和 ref。其次,我创建了一个新的 Xib 和 UIViewController,与我之前删除的名称相同,希望 Xcode 如果我创建然后重新删除它们会很高兴。然后我编译,重新删除它们,再次由 Xib 文件更新,用 grep 重新验证是的,确实,这个名字不存在任何东西。
它奏效了。在这个问题上花了几天时间之后,我相当确定界面生成器中存在一个错误,但我是否想重新审视这个问题来提交错误报告?绝对不...