我已经能够使用 SDK 访问联系人的通讯录联系人,但是每当我选择一个公司联系人时,我的应用程序就会崩溃。
有人知道公司领域的财产吗?有谁知道使它工作的代码?
提前致谢
我已经能够使用 SDK 访问联系人的通讯录联系人,但是每当我选择一个公司联系人时,我的应用程序就会崩溃。
有人知道公司领域的财产吗?有谁知道使它工作的代码?
提前致谢
您的问题似乎与公司标签本身无关。AB字段需要细心管理,不用时释放,一直检查nil,很多字段没有设置。
原则上,这是我如何使用它的示例。此函数加载联系人(对我的应用程序感兴趣的那些字段)并将包含联系人的数组返回给调用者。希望这会有所帮助。请注意我如何释放不需要的参考。
- (NSArray *)loadContacts
{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
NSMutableArray *contacts = [NSMutableArray array];
for (int i = 0 ; i < nPeople ; i++ ) {
ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
NSString *firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString *lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
NSString *fullName;
if (firstName && lastName) {
fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
} else {
if (firstName) {
fullName = [NSString stringWithString:firstName];
} else if (lastName) {
fullName = [NSString stringWithString:lastName];
} else {
continue;
}
}
NSString *email = nil;
ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
if (emails) {
NSArray *emailAddresses = [(NSArray *)ABMultiValueCopyArrayOfAllValues(emails) autorelease];
if (emailAddresses && [emailAddresses count] > 0)
email = [emailAddresses objectAtIndex:0];
CFRelease(emails);
}
if (email) {
NSDictionary *contact = [NSDictionary
dictionaryWithObjectsAndKeys:fullName, @"name",
email, @"email", nil];
[contacts addObject:contact];
}
if (firstName)
CFRelease(firstName);
if (lastName)
CFRelease(lastName);
}
CFRelease(allPeople);
CFRelease(addressBook);
return contacts;
}
您需要使用kABPersonOrganizationProperty
属性从通讯录中获取公司名称