2

ABPeoplePickerNavigationControllerDelegateを実装するときに、この奇妙な問題が発生しました。そのため、デリゲートメソッドで識別子の値が誤って取得されることがありました

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier;

たとえば、連絡先から最初の番号を選択した場合、識別子は0である必要があります。しかし、場合によっては1でした(その連絡先の番号が1つしかない場合でも)!!

それを確認するのは簡単です、

...
ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property);
int count = ABMultiValueGetCount(phoneProperty);
NSLog(@"How many numbers do I have %d and which number do I choose %d",count,identifier); 

そしてそれはいつかこれを印刷しました

私はいくつの番号を持っていますか1そしてどの番号を選択しますか1

誰かが同じ問題にぶつかったことはありますか?

更新:識別子がカウントよりも大きい場合があります。どうして!!

2つある番号と3つ選ぶ番号はいくつありますか

4

1 に答える 1

3

理由がわかっただけで、自分が恥ずかしいと思います。

したがって、ABMultiValueIdentifier はインデックスとは異なります。識別子を取得した後、ABMultiValueGetIndexForIdentifier を使用してインデックスを取得する必要があります。次に、そのインデックスを使用して ABMultiValueCopyValueAtIndex を呼び出します。

ところで、 AdressBook Crash でも同じ質問がありましたが、連絡先がいくつかありました。

于 2012-05-02T10:17:17.043 に答える