我正在阅读通讯录中的联系人......一切都很顺利,直到我测试一个没有名字的联系人(因为我可以只用电子邮件、电话或 wathever 创建联系人......)。代码(简化)是这样的:
- (NSMutableArray *) getContactsInfo {
NSMutableArray *contactsList = [[NSMutableArray alloc] init];
localAddressBook = ABAddressBookCreate();
int contactsLength = (int)ABAddressBookGetPersonCount(localAddressBook);
if (contactsLength < 1)
return nil;
for(int currentContact=1; currentContact < (contactsLength + 1); currentContact++) {
ABRecordRef person = ABAddressBookGetPersonWithRecordID(localAddressBook,(ABRecordID) currentContact);
firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSLog(@"%@", firstName);
[contactsList addObject:firstName];
CFRelease(person);
}
return contactsList;
}
我得到的输出是这样的:
2010-02-15 14:16:25.616 testApp[7065:207] Contact0
2010-02-15 14:16:25.618 testApp[7065:207] Contact1
2010-02-15 14:16:25.619 testApp[7065:207] Contact2
Program received signal: “EXC_BAD_ACCESS”.
我有 3 个名字和姓氏的联系人,一个只用姓氏创建的,用于测试目的。
似乎我可以正确读取任何属性,例如电子邮件或带有数组的地址......但是当联系人缺少名字属性时,应用程序崩溃。