【发布时间】:2012-03-24 06:24:16
【问题描述】:
我有以下代码:
- (Item *) getRandomItem {
if (itemIDs == nil) {
[self parse];
}
NSArray * allKeys = [allItems allKeys];
int seed = arc4random()%[allKeys count];
return [self getItemByID:[allKeys objectAtIndex:seed]];
}
它有时会在实时应用上崩溃,但我们无法重现崩溃。我一直在尝试分析报告并了解可能导致崩溃的原因,但我没有成功。我尝试以任何方式篡改 allItems 对象以产生崩溃,都会导致与此处报告的错误不同。
我希望了解在什么情况下会发生以下崩溃:
Hardware Model: iPhone3,1
Code Type: ARM (Native)
Parent Process: launchd [1]
OS Version: iPhone OS 5.0.1 (9A405)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000010
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libobjc.A.dylib 0x3427eb30 _class_isInitialized
1 libobjc.A.dylib 0x3427e8d6 _class_initialize
2 libobjc.A.dylib 0x3427e88e prepareForMethodLookup
3 libobjc.A.dylib 0x3427e76a lookUpMethod
4 libobjc.A.dylib 0x3427e008 objc_msgSend_uncached
5 CoreFoundation 0x33f7c020 CFRetain
6 CoreFoundation 0x33f85bac +[__NSArrayI __new::]
7 CoreFoundation 0x33f85ac6 -[__NSPlaceholderArray initWithObjects:count:]
8 CoreFoundation 0x33f85806 +[NSArray arrayWithObjects:count:]
9 CoreFoundation 0x33fa0e92 -[NSDictionary allKeys]
10 AClockworkBrain 0x0008f46e -[ItemManager getRandomItem] (ItemManager.m:360)
......
谢谢。
【问题讨论】:
-
您是否使用ARC?这似乎是与内存相关的错误。
-
等一下,您是否要向字典中添加原始整数?您正在尝试向内存 0x10 处的对象发送消息,这在您的应用程序中似乎是一个普通整数。
-
理查德,我们没有使用 ARC。
标签: objective-c ios crash crash-reports