gpt4 book ai didi

ios - ABRecordCopyValue 可以返回什么? (解决访问错误)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:21:57 25 4
gpt4 key购买 nike

我正在使用这个简单的代码来获取 ios 7 中地址簿的所有联系人。我的地址中有 155 个联系人。当我记录人们的名字时,我从我的地址簿中获得了 34 个正确的名字(显然是随机选择的),15 个名字为空,然后在第 50 项上出现错误的访问崩溃

   NSString *firstNames = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty)

我尝试登录姓氏或图像,但没有任何变化。我试图避免在没有任何更改的空对象上执行 ABRecordCopyValue。我尝试对 >50 的项目执行 ABRecordCopyValue 并在 50 到 150 的项目上得到相同的结果。我做错了什么?除了正确的值和 null 之外,ABRecordCopyValue 还能返回什么?

+(NSArray *)getAllContactsAddress
{
CFErrorRef *error = nil;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);

// SUPPOSE access has been granted
BOOL accessGranted = true;

if (accessGranted) {
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
NSMutableArray* items = [NSMutableArray arrayWithCapacity:nPeople];


for (int i = 0; i < nPeople; i++)
{
ContactsData *contacts = [ContactsData new];

ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);

NSString *firstNames = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);

NSLog(@"%@",firstNames);
}
}

最佳答案

认为 (实际上我很确定) 问题是 nPeople 是错误的值并且与数字不匹配allPeople 数组中的条目,就像您假设的那样。当 CFArray 已经提供了一种直接的方法时,您使用了一种奇怪的方法来获取 nPeople

我认为这会起作用:

CFIndex nPeople = CFArrayGetCount(allPeople);

在使用之前你还需要检查person是否为非NULL:

ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
NSAssert(person, @"Non-person detected!");

关于ios - ABRecordCopyValue 可以返回什么? (解决访问错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24651715/

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