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 回答