iOS AddressBook 关联帐户记录未显示在排序的副本中

iOS AddressBook linked account Records do not show in sorted copy

使用 iPhone 6 运行 iOS 8.2

我通过 os 设置添加了一个 gmail 帐户,gmail 的联系人 (~350) 显示在我的联系人列表中。

我还直接通过 phone 添加了 3 个新联系人。

如果我尝试通过 objective-c 以编程方式检索所有联系人,他们都会回来

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil);
NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBookRef);

如果我尝试按排序顺序 [via this question] 获取它们,则只会显示我通过 phone 添加的 3 条记录。 gmail 的没有 return.

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil);
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBookRef);
NSArray *sortedContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBookRef, source, kABPersonSortByFirstName);

编辑:无论我按名字还是姓氏排序,都会返回相同的 3 条记录。

我是不是做错了什么,或者我是否需要以某种方式触发 gmail 记录的索引?

编辑 2:_bridge 到 __bridge_transfer

你的三个iOS联系人和你的gmail联系人无疑是不同的来源。您的第二个代码示例有效地说 "I don't care about the gmail source, just get the contacts from the default source".

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering 中,如果您为源传递 NULL,它会获取所有联系人。不过,我从未找到有关此行为的文档,所以我总是通过 ABAddressBookCopyArrayOfAllPeople 检索所有联系人,然后自己对它们进行排序。