2010-12-07 2 views
0

내 테스터 중 하나에 대해서만 충돌하는 앱이 있습니다. 그러나 그녀를 위해 끊임없이 충돌합니다. 매우 이상합니다.한 명만 ABPeoplePicker 크래시

세부 사항 :
그녀는 상관없이 그녀는 나에게 그녀의 연락처를 보낼 때 그들이
을 만든 방법 아이폰 4와 아이폰 3GS
BOTH 전화
모든 연락처와 함께 응용 프로그램 충돌에 대한 모든 운영체제에 응용 프로그램 충돌에 없습니다 그들은 내 아이폰 4와 내 3G (안)에서 모두 잘 작동한다
그녀는 충돌을 일으키는 유일한 제품이며, 전화기와 모든 OS에서 일관된다.
그녀는 앱과 프로비저닝 프로파일을 제거하고 다시 설치했다.
그녀는 iPhone을 Windows와 동기화하고 있습니다. m achine 버전의 iTunes

ABPeoplePicker를 사용하면 충돌이 발생합니다.
그녀의 관점에서 보면 앱이 다운 된 전화 번호를 선택하는 순간처럼 보입니다. 물론 그녀는 그 순간 우리의 앱에 있지 않습니다. 그녀는 Apple에서 제공하는 ABPeoplePicker 탐색보기에 있습니다. resymbolicated crash 로그에서 내 앱으로 돌아 가려고 할 때 실제로 충돌하는 것처럼 보입니다. 다른 말로하면 크래시 로그에서 크래시를 실제로 담당 한 앱에 대한 언급을 찾을 수 없습니다 (아래 참조). 선택한 전화 번호의 색인을 가져올 수 없어서 앱으로 다시 돌아올 때 실패하지만 최선으로 추측됩니다. Apple 문서를 읽었으며 충돌 로그를 읽는 방법을 배우는 데있어서 부지런히 노력했지만 여전히 난처한 상황입니다. 내 질문은 다음과 같습니다
1. 예외 코드가 무엇인지 아는 사람 : 0x00000000, 0x00000000?
2. 9 번 줄은 실제 문제가 언급 된 곳이라고 가정하여 정정합니까? 그리고 만약 그렇다면 objc_exception_throw + 64가 무엇을 의미하는지 어떻게 이해할 수 있습니까?
3. 누군가이 충돌 로그에 문제가 무엇인지 밝힐 수 있습니까?

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 

다음은 내 ABPeoplePicker 코드입니다. 제일

#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]; 
} 

답변

2

, 그것은 symbolicatecrash 도구 당신이 그것을 컴파일 할 때 생성 된 DSYM 파일을 사용하여 충돌 로그를 symbolicate하는 데 도움이됩니다. 여기서 어떻게하는지에 대해서는 논의하지 않을 것입니다. Google을 검색하여 자세한 정보를 찾을 수 있습니다. "symbolic crash log DSYM"을 키워드로 사용해보십시오. 대신

당신이 그렇게되면 :

My App  [className callSomeMethod:argument] 

훨씬 쉽게

문제가 산란되는 코드의 라인을 찾을 :

My App  0x0232032+433 

이는 다음과 같이 표시됩니다.

그러나 마지막 줄의 코드가 Foundation에서 [array objectAtIndex:] 인 스택 추적에 유의하십시오. 이 메소드는 수신기 (예 : 배열)의 경계를 벗어난 색인을 전달할 때 NSRangeException을 던집니다.NSArray를 워드 프로세서에서 : 인덱스 (지수보다 크거나 카운트에 의해 리턴 된 값과 동일한 경우, 즉,)을 어레이의 단부를 벗어나면

는 NSRangeException가 발생된다.

그래서, 나는 당신의 추락 인 내 돈을 걸고 싶습니다.

그런 다음 질문은 - 충돌 로그를 상징화 한 후 코드 범위에서 경계를 벗어난 인덱스가있는 배열을 호출하고 있습니까?

+0

흥미 롭습니다. 위의 내용은 symbolicatecrash와 DSYM을 사용한 후의 것입니다. 내가 잘못한 것을 찾고 그 후에 어떤 일이 일어나는지 보려고 노력할 것이다. 도와 주셔서 감사합니다! – addzo

+0

Hrm. 내가 잘못된 충돌 기록을 보낸 것처럼 보입니다. 제가 15의 담당자를 가졌다면 당신을 투표 할 것입니다! 누군가 나를 위해 술을 뿌리 자! – addzo

+0

글쎄, 당신의 문제가 해결되면, 그냥 내 대답을 받아 들인대로 설정하십시오 :) – makdad