2010-12-07 10 views
0

Ich habe eine App, die nur für einen meiner Tester abstürzt - niemand anderen. Aber es stürzt für sie konsequent ab. Es ist sehr merkwürdig.ABPeoplePicker Crash für nur eine Person

Details:
Sie in iPhone 4 hat und ein iPhone 3Gs
Die App stürzt auf allen Betriebssystemen auf beiden Telefonen
Die App stürzt mit allen egal Kontakte, wie sie
erstellt wurden, als sie mir ihre Kontakte sendet Sie funktionieren gut sowohl auf meinem iPHone 4 und meinem 3G (nicht s)
Sie ist der einzige, der jemals einen Absturz und es ist konsistent über beide Telefone und alle Betriebssysteme
Sie hat die App und das Provisioning-Profil deinstalliert und neu installiert
Sie synchronisiert ihr iPhone mit einem Windows m Achine Version von iTunes

Der Absturz passiert, wenn wir ABPeoplePicker verwenden.
Aus ihrer Perspektive sieht es aus wie die Minute, die sie eine Telefonnummer auswählt, die App stürzt ab. Natürlich ist sie in diesem Moment nicht in unserer App. Sie befindet sich in der Navigationsansicht ABPeoplePicker, die von Apple bereitgestellt wird. Aus dem Resymboled Crash Log sieht es so aus, als ob es tatsächlich abstürzt, wenn es versucht, zu unserer App zurückzukehren. Mit anderen Worten, ich kann keine Erwähnung finden, dass unsere App tatsächlich für den Absturz im Crash-Log verantwortlich ist (siehe unten). Es sieht so aus, als ob es nicht in der Lage ist, den Index der ausgewählten Telefonnummer zu bekommen, und es scheitert dann, wenn wir versuchen, in unsere App zurückzukehren, aber das ist eine Vermutung. Ich habe die Apple-Dokumente gelesen und versucht, Due Diligence zu tun, um zu lernen, wie man Crash-Logs liest, aber ich bin immer noch ratlos. Hier sind meine Fragen:
1. Weiß jemand, was Exception Codes: 0x00000000, 0x00000000 bedeutet?
2. Stimmt die Annahme, dass in Zeile 9 die tatsächlichen Probleme angesprochen werden? Und wenn ja, wie verstehe ich, was objc_exception_throw + 64 bedeutet?
3. Kann jemand etwas Licht auf das werfen, was dieses Unfallprotokoll das Problem sagt?

Incident Identifier: 
CrashReporter Key: 
Hardware Model:  iPhone3,1 
Process:   My App [471] 
Path:    
Identifier:  My App 
Version:   ??? (???) 
Code Type:  ARM (Native) 
Parent Process: launchd [1] 

Date/Time:  2010-12-06 16:32:44.088 -0600 
OS Version:  iPhone OS 4.0.2 (8A400) 
Report Version: 104 

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x00000000, 0x00000000 
Crashed Thread: 0 

Thread 0 Crashed: 
0 libSystem.B.dylib    0x000791d0 __kill + 8 
1 libSystem.B.dylib    0x000791c0 kill + 4 
2 libSystem.B.dylib    0x000791b2 raise + 10 
3 libSystem.B.dylib    0x0008d6fa abort + 50 
4 libstdc++.6.dylib    0x00044a20 __gnu_cxx::__verbose_terminate_handler() + 376 
5 libobjc.A.dylib    0x000059ec _objc_terminate + 104 
6 libstdc++.6.dylib    0x00042df2 __cxxabiv1::__terminate(void (*)()) + 46 
7 libstdc++.6.dylib    0x00042e46 std::terminate() + 10 
8 libstdc++.6.dylib    0x00042f16 __cxa_throw + 78 
9 libobjc.A.dylib    0x000048cc objc_exception_throw + 64 
10 CoreFoundation     0x0001fb72 -[__NSArrayI objectAtIndex:] + 154 
11 My App     0x00005a68 0x1000 + 19048 
12 My App     0x00005dec 0x1000 + 19948 
13 UIKit       0x000668f4 -[UIViewController view] + 104 
14 UIKit       0x000784e4 -[UIViewController contentScrollView] + 16 
15 UIKit       0x00078354 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 24 
16 UIKit       0x00078252 -[UINavigationController _layoutViewController:] + 18 
17 UIKit       0x00077d58 -[UINavigationController _startTransition:fromViewController:toViewController:] + 372 
18 UIKit       0x00077b68 -[UINavigationController _startDeferredTransitionIfNeeded] + 176 
19 UIKit       0x00066fa8 -[UINavigationController pushViewController:transition:forceImmediate:] + 600 
20 UIKit       0x00066d40 -[UINavigationController pushViewController:animated:] + 28 
21 My App     0x0000a29a 0x1000 + 37530 
22 My App     0x0000bcba 0x1000 + 44218 
23 AddressBookUI     0x00032cfc -[ABPeoplePickerNavigationController personViewController:shouldPerformDefaultActionForPerson:property:identifier:withMemberCell:] + 152 
24 AddressBookUI     0x0003b8ce -[ABPersonViewControllerHelper personTableViewDataSource:selectedPropertyAtIndex:inPropertyGroup:withMemberCell:forEditing:] + 222 
25 AddressBookUI     0x0004a17c -[ABPersonTableViewDataSource valueAtIndex:selectedForPropertyGroup:withMemberCell:forEditing:] + 40 
26 AddressBookUI     0x00048c00 -[ABPersonTableViewDataSource tableView:didSelectRowAtIndexPath:] + 316 
27 UIKit       0x00091f40 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 656 
28 UIKit       0x0009db40 -[UITableView _userSelectRowAtIndexPath:] + 124 
29 Foundation      0x00086c86 __NSFireDelayedPerform + 362 
30 CoreFoundation     0x00071a54 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8 
31 CoreFoundation     0x00073ede __CFRunLoopDoTimer + 854 
32 CoreFoundation     0x0007485e __CFRunLoopRun + 1082 
33 CoreFoundation     0x0001d8e4 CFRunLoopRunSpecific + 224 
34 CoreFoundation     0x0001d7ec CFRunLoopRunInMode + 52 
35 GraphicsServices    0x000036e8 GSEventRunModal + 108 
36 GraphicsServices    0x00003794 GSEventRun + 56 
37 UIKit       0x000062a0 -[UIApplication _run] + 396 
38 UIKit       0x00004e10 UIApplicationMain + 664 
39 My App     0x0000d694 0x1000 + 50836 
40 My App     0x00002d00 0x1000 + 7424 

Hier ist mein ABPeoplePicker Code.

#pragma mark ABPeoplePickerNavigationControllerDelegate methods 
// Displays the information of a selected person 
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{ 
    return YES; 
} 

// Does not allow users to perform default actions such as dialing a phone number, when they select a person property. 
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
    shouldContinueAfterSelectingPerson:(ABRecordRef)person 
       property:(ABPropertyID)property 
            identifier:(ABMultiValueIdentifier)identifier { 

    CFStringRef cfName = ABRecordCopyCompositeName(person); 
    self.selectedName = [NSString stringWithString:(NSString *)cfName]; 
    CFRelease(cfName); 

    ABMultiValueRef allThePhoneNums = ABRecordCopyValue(person, kABPersonPhoneProperty); 

    // ABMultiValueGetIndexForIdentifier the exact value of the "identifier" passed to us. 
    NSString *number = (NSString *)ABMultiValueCopyValueAtIndex(allThePhoneNums, ABMultiValueGetIndexForIdentifier(allThePhoneNums, identifier)); 

    self.selectedNumber = number; 

    [number release]; 

    CFRelease(allThePhoneNums); 

    [self showDialOutToPartViewControllerWithName:self.selectedName andNumber:self.selectedNumber]; 

    [peoplePicker dismissModalViewControllerAnimated:YES]; 

    return NO; 
} 


// Dismisses the people picker and shows the application when users tap Cancel. 
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker; { 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Antwort

2

Foremost, hilft es, Ihre Crash-Protokolle mit dem symbolicatecrash Werkzeug und die DSYM Datei symbolicate, die erzeugt wurde, wenn Sie es zusammengestellt. Ich werde hier nicht besprechen, wie das geht - Sie können Google durchsuchen, um weitere Details zu finden. probiere "symbolicate crash log DSYM" als Schlüsselwörter.

Sobald Sie das tun, statt:

My App  0x0232032+433 

Es wird so etwas wie diese zeigen:

My App  [className callSomeMethod:argument] 

viel einfacher, die Codezeile zu finden, der das Problem Laichen.

Beachten Sie jedoch im Stack-Trace, dass die letzte Zeile des Codes [array objectAtIndex:] in Foundation ist. Diese Methode wird NSRangeException auslösen, wenn Sie einen Index außerhalb der Grenzen des Empfängers (z. B. Array) übergeben.Aus der NSArray docs:

Wenn Index über das Ende des Array ist (das heißt, wenn der Index von Zählwert größer als oder gleich den Wert zurückgekehrt ist), wird ein NSRangeException erhöht.

Also, ich würde mein Geld darauf setzen, dass es Ihr Absturz ist.

Dann lautet die Frage - nachdem Sie Ihr Absturzprotokoll symbolisiert haben - welche Zeile Ihres Codes ruft ein Array mit einem Out-of-Bounds-Index auf?

+0

Interessant. Was Sie oben sehen, ist nach der Verwendung von symbolicatecrash und der DSYM. Ich werde versuchen herauszufinden, was ich falsch gemacht habe und was danach passiert. Danke für die Hilfe! – addzo

+0

Hrm. Sieht so aus, als hätte man mir das falsche Crash Log geschickt. Wenn ich eine Wiederholung von 15 hätte, würde ich dich wählen! Jemand gibt Requisiten, um für mich zu täuschen! – addzo

+0

Nun, wenn es Ihr Problem gelöst hat, nur meine Antwort als akzeptiert :) – makdad