不能设置ABPeoplePickerNavigationController的addressBook属性而不会崩溃 [英] Can't set the addressBook property of ABPeoplePickerNavigationController without crashing
问题描述
我只想显示一个定义了地理位置的人的ABPeoplePicker.
I want to display an ABPeoplePicker with only people who have a geographic address defined.
因此,我创建了一个地址簿并删除了没有地址的人:
So I create an addressBook and remove people that dont have an address:
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条记录.
For info, before filtering I have 125 records, and after filtering I have 93 records.
当我显示peoplePicker并滚动浏览时,它崩溃并显示:
When I display the peoplePicker and scroll through it, it crashes with:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (49) beyond bounds (49)'
你知道怎么了吗?
推荐答案
NSRangeException的值为49(而不是介于93和125之间的某个数字)的事实,我最初怀疑它与该通讯簿没有直接关系.为 objc_exception_throw
添加一个断点.这将导致您在异常发生时进入调试器,让您看到实际上是谁在抛出它.
The fact that the NSRangeException's value is 49 (rather than some number between 93 and 125), I initially suspect that it's not directly related to this address book. Add a breakpoint for objc_exception_throw
. That will cause you to drop into the debugger at the point of the exception, letting you see who's actually throwing it.
这篇关于不能设置ABPeoplePickerNavigationController的addressBook属性而不会崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!