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를 표시하고 그것을 통해 스크롤하면?
일부 개인 클래스에서 중단됩니다 : ABMembersController. 그래서 나는 레코드를 삭제할 때 주소록이 손상되었다고 가정합니다 : 만약 내가 ABAddressBookRemoveRecord 라인에 주석을 달았다면 충돌이 없습니다. –
나는이 코드를 직접 실행했는데 나는 당신이 코코아 버그를 발견했다고 생각한다. 먼저이 코드를 3.0에 대해 테스트 한 다음 레이더를 엽니 다. iPhone에서의 AddressBook에 대한 나의 경험은 아직 완전하게 "조리되지"않았다는 것입니다. 나는 그들이 "실제"주소록과 일치하지 않는 주소록을 표시하고있는 경우에 많이 테스트 한 것으로 생각하지 않습니다. 그들은 3.0에서 무거운 작업을하고있는 것으로 보입니다. 왜냐하면 우리가보고 한 버그 중 일부가 수정되어 나중에 베타 버전으로 다시 도입되기 때문입니다. 빈 주소록을 작성하여 원하는 것을 추가하여 버그가 해결되는지 확인할 수 있습니다. –
빈 주소록을 만드는 방법을 찾지 못했습니다. 나는 문서에서 뭔가를 놓쳤는가? –