我正在通过我的iOS应用程序的用户收到崩溃报告,但崩溃我无法重现自己,也无法将错误追溯到我自己的代码中的一行(除了它来自main.m中的第14行)但这是iOS应用程序的默认应用程序创建。在我收到的崩溃报告之下。
理解在某个时刻,正在从空数组中检索索引为0的对象。但是因为它似乎没有指向我自己的代码,它可能是iOS中的一个错误吗? (它发生在不同的平台和不同的iOS版本上)。
我希望有人知道发生了什么,或者能指出正确的方向。 感谢。
CRASH REPORT:
Incident Identifier: [TODO]
CrashReporter Key: [TODO]
Process: Mary Black [797]
Path: /var/mobile/Applications/28A68F8B-294E-4B86-9E75-ED5484E5EF4D/Mary Black.app/Mary Black
Identifier: net.broset.Mary-Black
Version: 225
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-10-14 03:47:32 +0000
OS Version: iPhone OS 5.0 (9A334)
Report Version: 104
Exception Type: SIGTRAP
Exception Codes: #0 at 0x35b07848
Crashed Thread: 0
Application Specific Information:
*** Terminating app due to uncaught exception \\\'NSRangeException\\\', reason: \\\'*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array\\\'
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00010848 __kill + 8
1 CoreFoundation 0x000b9987 __handleUncaughtException + 75
2 libobjc.A.dylib 0x000092d1 _objc_terminate + 129
3 libc++abi.dylib 0x000043c5 _ZL19safe_handler_callerPFvvE + 77
4 libc++abi.dylib 0x00004451 operator delete(void*) + 1
5 libc++abi.dylib 0x00005825 __cxa_current_exception_type + 1
6 libobjc.A.dylib 0x00009235 objc_exception_rethrow + 13
7 CoreFoundation 0x0000f545 CFRunLoopRunSpecific + 405
8 CoreFoundation 0x0000f3a5 CFRunLoopRunInMode + 105
9 GraphicsServices 0x00003fed GSEventRunModal + 157
10 UIKit 0x00031743 UIApplicationMain + 1091
11 Mary Black 0x00002fa7 main (main.m:14)
答案 0 :(得分:20)
调试此问题的一种方法是在objectAtIndex上添加一个符号断点:这可能导致许多命中objectAtIndex:在调试器击中你之前的那个之前但保证找到它。
Xcode 4中的步骤:
在运行时,如果您无法分辨哪个objectAtIndex:您正在点击,请将Debug Navigator底部的滑块一直移到右侧。
答案 1 :(得分:3)
这将使调试器停在违规行:
Xcode / Edit Scheme / Diagnostics / Log Exceptions。
答案 2 :(得分:2)
此错误表示您尝试从未找到对象的位置从NSArray获取对象。换句话说:如果索引为0,则表示数组为空 而且很可能是你的代码,因为main()会调用你的代码。
答案 3 :(得分:1)
您需要在项目中搜索objectAtIndex:
的所有用法,并排除每个用户的罪魁祸首。确保你从不在空数组上调用它。
另一个提示:如果你知道你只想获取数组中的最后一个对象,或你知道数组只会包含一个对象,你可以使用lastObject
代替objectAtIndex:
- 它更安全,因为它不会抛出异常,但您仍然需要检查nil
。