在iOS开发中,获取通讯录是一个常见的需求。本文将介绍在iOS平台上如何获取通讯录。
iOS平台上获取通讯录的方法主要有两种:ABAddressBook和CNContactStore。其中,ABAddressBook是iOS 9之前的API,CNContactStore是iOS 9之后的API。
ABAddressBook
ABAddressBook是Address Book框架中的一个类,它提供了访问通讯录的功能。使用ABAddressBook获取通讯录的步骤如下:
1. 导入Address Book框架
在代码中引入Address Book框架:
“`
#import
“`
2. 请求访问权限
在iOS 6及以上版本中,需要用户授权才能访问通讯录。可以调用ABAddressBookRequestAccessWithCompletion函数请求访问权限:
“`
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (granted) {
// 授权成功,获取通讯录
[self getContactsFromAddressBook:addressBook];
} else {
// 授权失败
}
});
“`
3. 获取通讯录
授权成功后,可以使用ABAddressBookCopyArrayOfAllPeople函数获取通讯录中的所有联系人:
“`
– (void)getContactsFromAddressBook:(ABAddressBookRef)addressBook {
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex count = CFArrayGetCount(allPeople);
for (int i = 0; i
ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
// 处理联系人信息
}
CFRelease(allPeople);
}
“`
在获取每个联系人的信息之前,需要判断该联系人是否有电话号码:
“`
if (ABRecordGetRecordType(person) == kABPersonType) {
ABMultiValueRef phones = ABRecordPHP网页 转换APPCopyValue(person, kABPersonPhoneProperty);
CFIndex phoneCount = ABMultiValueGetCount(phones腾讯多渠道打包);
if (phoneCount > 0) {
// 处理联系人信息
}
CFRelease(phones);
}
“`
CNContactStore
CNContactStore是Contac

ts框架中的一个类,它提供了访问通讯录的功能。使用CNContactStore获取通讯录的步骤如下:
1. 导入Contacts框架
在代码中引入Contacts框架:
“`
#import
“`
2. 请求访问权限
在iOS 9及以上版本中,需要用户授权才能访问通讯录。可以调用CNContactStore的requestAccessForEntityType:completionHandler:方法请求访问权限:
“`
CNContactStore *contactStore = [[CNContactStore alloc] init];
[contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
// 授权成功,获取通讯录
[self getContactsFromContactStore:contactStore];
} else {
// 授权失败
}
}];
“`
3. 获取通讯录
授权成功后,可以使用CNContactFetchRequest类获取通讯录中的所有联系人:
“`
– (void)getContactsFromContactStore:(CNContactStore *)contactStore {
NSArray *keys = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey];
CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys];
[contactStore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
// 处理联系人信息
}];
}
“`
在获取每个联系人的信息之前,需要判断该联系人是否有电话号码:
“`
if (contact.phoneNumbers.count > 0) {
// 处理联系人信息
}
“`
总结
ABAddressBook和CNContactStore都可以用于获取iOS平台上的通讯录。在iOS 9及以上版本中,推荐使用CNContactStore。获取通讯录的过程中,需要注意用户授权和联系人信息的处理。


















