我正在模拟器3.1.3上测试我的应用程序,运行正常。 当它来到模拟器3.2时,它从一开始就崩溃了:
2010-06-24 16:35:29.208 MyTestApp[6991:207] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:'
2010-06-24 16:35:29.213 MyTestApp[6991:207] Stack: (
46195275,
2520474889,
46194715,
46194554,
6387912,
6392266,
5568184,
6388086,
6386450,
6392266,
5564974,
5573454,
3555255,
3560368,
3586056,
3567777,
3599431,
52998524,
45735996,
45731912,
3559044,
3591649,
10824,
10678
)
据我所知,我不使用“initWithCoder”方法(虽然不知道这是什么)。
我如何知道抛出异常的位置,以便更好地了解造成问题的原因?
ps:我在Breakpoint中添加了一个异常:objc_exception_throw(位置libobjc.A.dylib,奇怪的是我必须手动输入位置,我希望xcode能在我添加objc_exception_throw时找到它)。但仍然是相同的痕迹,没有更多的信息。
答案 0 :(得分:1)
此页面应提供一些有用的信息:Debugging Tips for Objective-C
特别感兴趣的是控制台命令info line *
。异常日志列出的每个号码都是堆栈中的地址。例如,10,000和以下范围内的那些底部通常位于应用程序的主要方法中。最高范围的地址往往代表默认库。
使用命令info line *10678
可能会返回有关main方法中特定行的一些信息,这对此没什么帮助。通常的诀窍是在默认库开始之前找到最高地址。我不确定这会对你的问题有多大帮助,因为预期的小地址和下一个最高的地址之间存在巨大的差距。在任何情况下,从底部两个上方的最小地址开始(从我在您发布的日志中看到的3555255),看看它是否从您自己的代码文件中返回一行。如果是,请检查上面的那个,依此类推,直到找到您自己代码中的最后一个地址。希望这会有所帮助。
答案 1 :(得分:1)
我弄清楚了这个错误的原因。我在IB中创建了一个类型为NSDictionnary的对象,看起来这不是正确的方法。相反,我在XCode中以编程方式创建了这个相同的对象,这很好。似乎这是一种持久性问题。