我想显示只有定义了地理地址的人的ABPeoplePicker。
所以我创建了一个addressBook并删除了没有地址的人:
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)'
知道什么是错的吗?
答案 0 :(得分:0)
NSRangeException的值为49(而不是93到125之间的某个数字),我最初怀疑它与此地址簿没有直接关系。为objc_exception_throw
添加断点。这将导致您在异常点进入调试器,让您看看实际上是谁抛出它。