0

当我将我的联系人应用程序滚动到底部时,它会显示联系人数量,它会显示2568联系人。

但是在我的应用程序中,当我尝试通过 ABAddressBookGetPersonCount 从 AddressBook 中获取联系人数量时,我得到了2582联系人。

有没有人注意到这一点?为什么会有这种差异?AddressBook 框架是否给我错误的信息?

编辑

 CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
 CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
 NSLog(@"num people to send: %ld", nPeople);
 NSLog(@"num people in array: %ld", CFArrayGetCount(allPeople));

这两个日志,给了我相同的数字,但是这个数字与 iphone 中联系人应用程序底部的数字不同。

4

2 回答 2

0

联系人应用程序从各个组中提取其联系人。您可以通过转到组选择页面(IOS 7 中的左上角)并选择或取消选择您的联系人来更改列表中的人数。

如果您的列表中包含所有“可用”的联系人,则差异是由于联系人来自联系人应用程序中未使用的来源。您可能已经注意到,您可以开始输入电子邮件,即使您与该人没有联系,它也会自动填写电子邮件。该信息存储在地址簿数据库中,但不会被拉入联系人应用程序。当您使用 ABAddressBookCopyArrayOfAllPeople 时,它​​还会拉入这些“联系人”。您可以通过将所有联系人放在一个表格视图中并打印出每个联系人的姓名、第一封电子邮件、第一个电话号码来验证这一点。您可能会发现一些仅包含电子邮件地址(或可能是电话号码)的联系人。

可以在此处找到如何打印所有联系人的示例。

于 2013-10-14T03:47:13.337 回答
0

使用此代码

ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
CFArrayRef allPeople = (ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName));
//CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
CFIndex nPeople = CFArrayGetCount(allPeople); // bugfix who synced contacts with facebook
于 2015-10-26T07:00:56.160 回答