作为Xcode新手的Java和PHP开发人员,我在处理内存错误方面遇到了麻烦。我有一本书中的示例程序,它在启动时因“程序接收信号'SIGABRT'而崩溃。”我不知道如何处理下面的控制台输出。我意识到它是某种堆栈跟踪,但左边的名称只是应用程序的名称,而不是类或文件。我不知道“主+ 121”或“开始+ 53”意味着什么或在哪里看。任何指导都将不胜感激。
2011-05-11 10:43:23.071 FlowerInfoNavigator[22537:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFDictionary objectForKey:]: method sent to an uninitialized mutable dictionary object'
*** Call stack at first throw:
(
0 CoreFoundation 0x00dc25a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x00f16313 objc_exception_throw + 44
2 CoreFoundation 0x00dbf542 -[__NSPlaceholderDictionary objectForKey:] + 194
3 FlowerInfoNavigator 0x0000289a -[RootViewController tableView:didSelectRowAtIndexPath:] + 330
4 UIKit 0x0008bb68 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
5 UIKit 0x00081b05 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219
6 Foundation 0x0079b79e __NSFireDelayedPerform + 441
7 CoreFoundation 0x00da38c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
8 CoreFoundation 0x00da4e74 __CFRunLoopDoTimer + 1220
9 CoreFoundation 0x00d012c9 __CFRunLoopRun + 1817
10 CoreFoundation 0x00d00840 CFRunLoopRunSpecific + 208
11 CoreFoundation 0x00d00761 CFRunLoopRunInMode + 97
12 GraphicsServices 0x00ffa1c4 GSEventRunModal + 217
13 GraphicsServices 0x00ffa289 GSEventRun + 115
14 UIKit 0x00022c93 UIApplicationMain + 1160
15 FlowerInfoNavigator 0x00001b99 main + 121
16 FlowerInfoNavigator 0x00001b15 start + 53
)
terminate called after throwing an instance of 'NSException'
(gdb)
答案 0 :(得分:4)
右边是调用堆栈的方法。我通常只是寻找来自我的一个方法的任何东西(虽然这并不总是有效)然后它会给你问题源于的方法调用。在“FlowerInfoNavigator”的电话号码3的跟踪中,方法tableView:didSelectRowAtIndexPath
:被调用,并且在那里的某处导致了崩溃。您应该能够使用调试器和断点来从中缩小范围。祝你好运。
编辑:当我看到你的错误信息:在它的顶部,它给你错误。您试图从尚未初始化的NSDictionary中检索对象,从上面开始,它出现在您的didSelectRowAtIndexPath
方法
答案 1 :(得分:0)
控制台不是你唯一看的地方。看看你的调试器。那边通常有一条粗体线。如果点击它,它会告诉你崩溃的确切位置。
您似乎没有初始化NSDictionary
答案 2 :(得分:0)
崩溃是由于nsdictionary尚未初始化以及如何在崩溃期间进行搜索,首先查看控制台,以便了解导致崩溃或异常的原因并获取应用程序崩溃的位置,您可以查看调试器在调试器中,应用程序崩溃时,粒子线将以粗体显示。
除了你还可以使用NSZombieEnabled(BOOL)来获取导致应用程序崩溃的原因。更多关于NSZombieEnabled的信息可以在这里找到http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/130-Debugging_Applications/debugging_applications.html
注意:这里确保在处理申请提交到苹果商店时将NSZombieEnabled设置为NO。
希望这有帮助。