Mam następujący kod:NSDictionary AllKeys klasy wywala - Nie mogę zrozumieć okoliczności zgłoszenie awarii
- (Item *) getRandomItem {
if (itemIDs == nil) {
[self parse];
}
NSArray * allKeys = [allItems allKeys];
int seed = arc4random()%[allKeys count];
return [self getItemByID:[allKeys objectAtIndex:seed]];
}
Czasami awarii na żywo app, ale nie możemy odtworzyć awarię. Próbowałem przeanalizować raport i zrozumieć, co może być przyczyną katastrofy, ale nie udało mi się. Jakikolwiek sposób, w jaki próbuję manipulować obiektem allItems
, powodując awarię, powoduje błąd inny niż tu opisany.
chciałbym jakąś pomoc zrozumienia w jakich okolicznościach po awarii byłoby wystąpić:
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)
......
Dziękuję.
Czy używasz ARC, czy nie? Wydaje się, że jest to błąd związany z pamięcią. –
Czekaj, czy próbujesz dodać surową liczbę całkowitą do słownika? Próbujesz wysłać wiadomość do obiektu w pamięci 0x10, która wydaje się być czymś, co byłoby normalną liczbą całkowitą w twojej aplikacji. –
Richard, nie używamy ARC. – dimitrios