Не удается установить свойство адресной книги ABPeoplePickerNavigationController без сбоя - PullRequest
0 голосов
/ 24 мая 2009

Я хочу отобразить ABPeoplePicker только с людьми, у которых определен географический адрес.

Итак, я создаю адресную книгу и удаляю людей, у которых нет адреса:

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)'

Есть идеи, что случилось?

1 Ответ

0 голосов
/ 24 мая 2009

То, что значение NSRangeException равно 49 (а не какое-то число между 93 и 125), я изначально подозреваю, что оно не имеет прямого отношения к этой адресной книге. Добавьте точку останова для objc_exception_throw. Это приведет к тому, что вы попадете в отладчик в точке исключения, что позволит вам увидеть, кто на самом деле его выбрасывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...