我打开了一个旧的 iOS 项目,就像 2010 年的 iOS 3 一样旧,发现它在启动时崩溃了。例外是:
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:'
我现在已经搞砸了这个项目几个小时,试图找出导致它的原因。我觉得我已经耗尽了我的智慧和资源,没有从头开始重新做大部分应用程序。关于可能是什么原因的任何想法?
我的调查结果:
该项目是对 AppStore 中现有内容的全新 git checkout。是的,该应用程序非常简单,可以在 2 年内无需任何更新即可正常运行。
我更改为使其编译是将基本 SDK 从 4.1(Xcode 中不再可用)更改为 iOS6 并点击运行。项目设置中的目标仍然是 3.0。
我检查了我没有在代码中的任何地方调用或实现 initWithCoder。我的代码中指示的行只是对 main.m 中的 UIApplicationMain() 的调用,这对我没有多大帮助。
该应用程序只有 3 个视图。主要、细节和关于。看起来 MainView 或 MainViewController 包含问题。我从应用程序没有崩溃的结论是: 1.选择在启动时不将其添加到 NavigationController。2.选择添加 AboutController。
我怀疑问题出在 Xib 文件而不是控制器或视图代码上,因为我可以使用 AboutView Xib 初始化 MainViewController 并启动应用程序。
我想知道我是否可以“修复”这个 Xib,或者我是否必须创建一个新的并重新布局 GUI 元素?这是我唯一的出路,我害怕。该应用程序很简单,但重新布局主要(也是最密集的)视图仍然需要一些时间。此外,我更愿意知道问题出在哪里,而不是重新开始,可能有一天会再次陷入同样的境地。
我在正确的轨道上吗?有没有办法追踪有问题的代码或 GUI 小部件?
提前感谢您的任何建议。
更新:在新的 Xib 中重新创建 UI 的基础知识并使用该应用程序后,该应用程序可以正常工作。仍然想知道我是否可以通过更改其中的某些设置或其他设置来修复旧的。