我使用这个简单的代码来获取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);
}
}
person == NULL
吗? - trojanfoe