2009-05-24 6 views
0

지리적 주소가 정의 된 사람들 만 ABPeoplePicker를 표시하려고합니다.충돌없이 ABPeoplePickerNavigationController의 addressBook 속성을 설정할 수 없습니다.

그래서 나는 주소록을 생성하고 주소 해달라고 사람들 제거 : 나는 125 개 레코드가 필터링하기 전에, 정보에 대한

addressBook = ABAddressBookCreate(); 
NSArray *peopleList = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); 
NSLog(@"There are %d people in addressBook", ABAddressBookGetPersonCount(addressBook)); 
for (id peopleRecord in peopleList) { 
    ABMultiValueRef mv = ABRecordCopyValue((ABRecordRef)peopleRecord, kABPersonAddressProperty); 
    CFIndex numberOfAddresses = ABMultiValueGetCount(mv); 
    if(numberOfAddresses == 0) { 
    CFErrorRef err; 
    ABAddressBookRemoveRecord(addressBook, (ABRecordRef)peopleRecord, &err); 
    } 
} 
[peopleList release]; 
NSLog(@"There are now %d people in addressBook", ABAddressBookGetPersonCount(addressBook)); 
ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init]; 
NSNumber* addressProp = [NSNumber numberWithInt:kABPersonAddressProperty]; 
[peoplePicker setAddressBook:addressBook]; 
peoplePicker.displayedProperties = [NSArray arrayWithObject:addressProp]; 
[peoplePicker setPeoplePickerDelegate:self]; 
[self presentModalViewController:peoplePicker animated:YES]; 

을하고, 여과 한 후 나는 93 개 기록을 가지고있다. 뭐가 잘못

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (49) beyond bounds (49)' 

어떤 생각 :

나는 그것과 충돌의 peoplePicker를 표시하고 그것을 통해 스크롤하면?

답변

0

NSRangeException의 값이 (93과 125 사이의 숫자가 아닌) 49라는 사실 때문에 나는이 주소록과 직접 관련이 없다고 생각합니다. objc_exception_throw에 대한 중단 점을 추가하십시오. 이렇게하면 예외가 발생했을 때 디버거에 빠져서 누가 실제로 던지고 있는지 알 수 있습니다.

+0

일부 개인 클래스에서 중단됩니다 : ABMembersController. 그래서 나는 레코드를 삭제할 때 주소록이 손상되었다고 가정합니다 : 만약 내가 ABAddressBookRemoveRecord 라인에 주석을 달았다면 충돌이 없습니다. –

+0

나는이 코드를 직접 실행했는데 나는 당신이 코코아 버그를 발견했다고 생각한다. 먼저이 코드를 3.0에 대해 테스트 한 다음 레이더를 엽니 다. iPhone에서의 AddressBook에 대한 나의 경험은 아직 완전하게 "조리되지"않았다는 것입니다. 나는 그들이 "실제"주소록과 일치하지 않는 주소록을 표시하고있는 경우에 많이 테스트 한 것으로 생각하지 않습니다. 그들은 3.0에서 무거운 작업을하고있는 것으로 보입니다. 왜냐하면 우리가보고 한 버그 중 일부가 수정되어 나중에 베타 버전으로 다시 도입되기 때문입니다. 빈 주소록을 작성하여 원하는 것을 추가하여 버그가 해결되는지 확인할 수 있습니다. –

+0

빈 주소록을 만드는 방법을 찾지 못했습니다. 나는 문서에서 뭔가를 놓쳤는가? –

관련 문제