Ios 获取地址簿的索引值?

Ios 获取地址簿的索引值?,ios,addressbook,Ios,Addressbook,当我们知道ABRecordRef和地址簿时,如何获取地址簿的索引 我正在使用: ABRecordRef ref= CFArrayGetValueAtIndex(AddressBookPeople, index); 获取给定索引处的记录引用 类似地,当已知ABRecordRef值时,如何获取记录的索引?NSArray有一种方法: - (NSUInteger)indexOfObject:(id)anObject 返回其对应数组值等于给定对象的最低索引 CFArray与NSArray进行免费桥接

当我们知道
ABRecordRef
和地址簿时,如何获取地址簿的索引

我正在使用:

ABRecordRef ref= CFArrayGetValueAtIndex(AddressBookPeople, index);
获取给定索引处的记录引用


类似地,当已知
ABRecordRef
值时,如何获取记录的索引?

NSArray
有一种方法:

- (NSUInteger)indexOfObject:(id)anObject 
返回其对应数组值等于给定对象的最低索引

CFArray
NSArray
进行免费桥接。所以我觉得这应该行得通

int index = [(NSArray *)AddressBookPeople indexOfObject:ref];
编辑::

  ABAddressBookRef addressBook = ABAddressBookCreate();
  CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
  ABRecordRef ref= CFArrayGetValueAtIndex(people, 4);
  NSUInteger i = [(__bridge NSArray *)people indexOfObject:(__bridge id)(ref)];

这给了我正确的索引。

您还可以更正确地使用:

CFArrayGetFirstIndexOfValue

这里AddressBookPeople是CFArrayRef,这没有IndexOfoObject方法这就是为什么我说CFArrayRef是tollfree与NSArray桥接的,所以它应该工作。不过你可能需要打字。查看我的编辑。无返回的20000+记录索引600记录仅可用people=abAddressBookCopyArrayFallPeople(addressBook);NSArray*tempPeople=(u桥NSArray*)(AddressBookPeople);NSU整数i=[tempPeople indexOfObject:(uu桥id)(参考)];所以我很好奇,自己试了试。请参阅我的编辑。它对我有用。