2009-05-24 33 views
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)' 

任何想法有什麼不對?

回答

0

事實上,NSRangeException的值是49(而不是93和125之間的某個數字),我最初懷疑它與此地址簿沒有直接關係。爲objc_exception_throw添加一個斷點。這會讓你在異常時掉入調試器,讓你看到誰在拋出它。

+0

它破壞了一些私人類:ABMembersController。所以我想當刪除記錄時的地址簿已損壞:如果我註釋ABAddressBookRemoveRecord行,它不會崩潰。 – 2009-05-25 06:43:54

相關問題