不同的计数在联系人应用程序和ABAddressBookGetPersonCount



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

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

有人注意到这个吗?为什么会有这样的差异呢?地址簿框架给我错误的信息吗??

编辑

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

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

联系人应用程序从不同的组中提取联系人。你可以通过进入群组选择页面(IOS 7的左上角)选择或取消选择联系人来更改列表中的人数。

如果你的列表正在拉入所有"可用"的联系人,那么差异是由于联系人来自联系人应用程序中未使用的来源。你可能已经注意到,你可以开始输入电子邮件,即使你没有联系人,它也会自动填写电子邮件。那个信息被存储在AddressBook数据库中,但不会被拉入Contact App。当你使用ABAddressBookCopyArrayOfAllPeople时,它也会拉入这些'联系人'。你可以通过将所有联系人放到tableview中并打印出每个联系人的姓名,第一个电子邮件,第一个电话号码来验证这一点。你可能会发现一些联系人只包含电子邮件地址(或者可能是电话号码)。

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

使用此代码

ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
CFArrayRef allPeople = (ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName));
//CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
CFIndex nPeople = CFArrayGetCount(allPeople); // bugfix who synced contacts with facebook

相关内容

最新更新