gpt4 book ai didi

iphone - ABAddressBookCopyArrayOfAllPeople 和 ABAddressBookGetPersonCount 返回不同的大小

转载 作者:可可西里 更新时间:2023-11-01 03:36:00 25 4
gpt4 key购买 nike

由于 ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering() 返回的数组与 ABAddressBookGetPersonCount() 的大小不同,我有一个应用偶尔会崩溃。代码的外壳如下所示。通常 nPeople 与数组大小相同。然而,在一位用户的 iPhone 上(或者至少,如一位用户所报告的那样),nPeople 几乎是原来的两倍大。我可以通过使用数组大小​​而不是 ABAddressBookGetPersonCount() 来阻止崩溃。但是,我不确定这是否意味着我无法访问 iPhone 中的所有联系人。

  • 以前有人遇到过这个问题吗?
  • 为什么数字会不同?

我想知道这是否与存储在组中的联系人有关(我不知道有组 - 只是一个想法)。另外,根据用户的电子邮件地址,我怀疑他们使用的是 MobileMe。我想知道与 MobileMe 同步是否会创建具有不同 recordId 的副本,但不会删除现有的联系人,至少不会像 ABAddressBookGetPersonCount() 那样。

编辑:我已经对此进行了更多研究,并且对问题的原因有了一个很好的了解。因为我想要一个排序的联系人数组,所以我使用了 ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering()。这需要地址簿来源 - 我使用默认来源。我相信可以有多种来源 - 本地来源加上其他来源,例如 Exchange 和 MobileMe。因此,我的数组最终将只包含本地联系人,而 ABAddressBookGetPersonCount() 返回的数字将包括所有来源 - 因此我崩溃了。因此,我认为最好只使用我的应用程序中的本地数据并使用 ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering 返回的数组大小而不是 ABAddressBookGetPersonCount。

CFArrayRef allPeople = InSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName);  

CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

for (int i = 0; i < nPeople; i++)
{
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
}

最佳答案

ABAddressBookGetPersonCountABAddressBookCopyArrayOfAllPeople给出不同的数组。

ABAddressBookGetPersonCount - 返回地址簿中的人员记录数。ABAddressBookCopyArrayOfAllPeople - 返回地址簿中的所有人员记录。

所以有时候同一个人可能会有额外的记录。这就是为什么您可能会得到不同尺寸的原因。

关于iphone - ABAddressBookCopyArrayOfAllPeople 和 ABAddressBookGetPersonCount 返回不同的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7473968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com