2009-05-24 8 views
0

地理的アドレスが定義されている人だけを含むABPeoplePickerを表示したいとします。クラッシュすることなくABPeoplePickerNavigationControllerのaddressBookプロパティを設定できません。

だから私は、アドレス帳を作成して、アドレス持っていけない人削除:私は125件のレコードを持っている、とフィルタリングの後、私は93件のレコードを持ってフィルタリングする前に、情報については

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]; 

を。

私はpeoplePickerを表示し、それをスクロールすると、それがでクラッシュ:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (49) beyond bounds (49)' 

間違って何任意のアイデア?

答えて

0

NSRangeExceptionの値が(93と125の間の何らかの数値ではなく)49であるという事実から、私は最初にこのアドレス帳に直接関係していないと考えています。 objc_exception_throwのブレークポイントを追加します。これにより、例外の時点でデバッガにドロップされ、実際に誰がそれを投げているのかを見ることができます。

+0

それはいくつかのプライベートクラスで壊れます:ABMembersController。だから、レコードを削除するときにアドレス帳が壊れていると思われます。私がABAddressBookRemoveRecordという行にコメントすると、クラッシュしません。 –

+0

私はこのコードを自分で実行しました。あなたはCocoaバグを発見したと思います。私はまずこのコードを3.0に対してテストし、次にレーダーを開きます。 iPhoneのAddressBookでの私の経験は、まだ完全に "調理"されていないということです。私は彼らが "本当の"アドレス帳と一致しないアドレス帳を表示している場合に彼らが重くテストしたとは思わない。私たちが報告したバグのいくつかを修正して、それを後のベータ版に再導入したので、3.0で重い作業をしているようです。空のアドレス帳を作成して、それがバグを回避するかどうかを確認することができます。 –

+0

空のアドレス帳を作成する方法が見つかりませんでした。私は文書で何かを忘れましたか? –

関連する問題