从我开发的应用程序中获得了一些奇怪的堆栈跟踪。这里是堆栈跟踪:

Exception Type:  SIGTRAP
Exception Codes: #0 at 0x312b1848
Crashed Thread:  0

Application Specific Information:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]:
attempt to insert nil object from objects[0]'

Thread 0 Crashed:
0   libsystem_kernel.dylib              0x35c48848 __kill + 8
1   CoreFoundation                      0x34dba957 __handleUncaughtException + 75
2   libobjc.A.dylib                     0x361e1345 _objc_terminate + 129
3   libc++abi.dylib                     0x000043c5 safe_handler_caller(void (*)()) + 77
4   libc++abi.dylib                     0x00004451 operator delete(void*) + 1
5   libc++abi.dylib                     0x00005825 __cxa_current_exception_type + 1
6   libobjc.A.dylib                     0x361e12a9 objc_exception_rethrow + 13
7   CoreFoundation                      0x34d1050d CFRunLoopRunSpecific + 405
8   CoreFoundation                      0x34d1036d CFRunLoopRunInMode + 105
9   GraphicsServices                    0x36f85439 GSEventRunModal + 137
10  UIKit                               0x32df5cd5 UIApplicationMain + 1081
11  myApp                               0x000073f9 main (main.m:42)

当您单击一个表 View 时,会发生这种情况,并且应在导航 Controller 上推一个 View 。我从未复制过此错误,所以我无法确切地说出它何时发生。

可能只有iOS 5.1.1受到了影响(仅存在该版本的崩溃报告)。
我总是在将对象添加到字典之前检查对象,因此加载xibs可能是原因吗?也许是某种程度的损坏,我意识到有时臂架的安装方式很奇怪...

谢谢你的帮助

最佳答案

如果崩溃报告程序没有报告异常回溯,则需要对其进行修复。自iOS 5(一年前!)以来,主线程上的异常已被捕获并“重新抛出”(因此为objc_exception_rethrow)。

我认为__NSPlaceholderDictionary就是通过调用[NSDictionary alloc]获得的。我怀疑罪魁祸首是执行[NSDictionary dictionaryWithObject:x forKey:@"foo"]而不检查x是否为nil的代码。

iTunes Connect的崩溃报告也可能会有所帮助,尽管它们显示的是实际崩溃的一小部分。

关于iphone - Hockey的CrashReport,使用NSPlaceholderDictionary的尴尬Stacktrace,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11583168/

10-12 02:06