0
我想仅显示一个ABPeoplePicker,其中只有定义了地理地址的人员。无法在不崩溃的情况下设置ABPeoplePickerNavigationController的地址簿属性
所以我创建一个地址簿,并删除不具有地址的人:
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];
有关信息,过滤之前,我有125条记录,并在过滤之后我有93条记录。
当我显示peoplePicker并通过它滚动,它与崩溃:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (49) beyond bounds (49)'
任何想法有什么不对?
它破坏了一些私人类:ABMembersController。所以我想当删除记录时的地址簿已损坏:如果我注释ABAddressBookRemoveRecord行,它不会崩溃。 – 2009-05-25 06:43:54