iOS 9.0 之前获取通讯录的方法
// 包含头文件
#import <AddressBook/AddressBook.h>
// 获取通讯录信息,自定义方法
- (void)fetchAddressBookBeforeIOS9 {
ABAddressBookRef addressBook = ABAddressBookCreate();
// 首次访问需用户授权
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
// 首次访问通讯录
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (!error) {
if (granted) {
// 允许
NSLog(@"已授权访问通讯录");
NSArray *contacts = [self fetchContactWithAddressBook:addressBook];
dispatch_async(dispatch_get_main_queue(), ^{
// 主线程 更新 UI
NSLog(@"contacts:%@", contacts);
});
} else {
// 拒绝
NSLog(@"拒绝访问通讯录");
}
} else {
NSLog(@"发生错误!");
}
});
} else {
// 非首次访问通讯录
NSArray *contacts = [self fetchContactWithAddressBook:addressBook];
dispatch_async(dispatch_get_main_queue(), ^{
// 主线程 更新 UI
NSLog(@"contacts:%@", contacts);
});
}
}
// 访问通讯录,自定义方法
- (NSMutableArray *)fetchContactWithAddressBook:(ABAddressBookRef)addressBook {
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
// 有权限访问
// 获取联系人数组
NSArray *array = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *contacts = [NSMutableArray array];
for (int i = 0; i < array.count; i++) {
//获取联系人
ABRecordRef people = CFArrayGetValueAtIndex((__bridge ABRecordRef)array, i);
// 获取联系人详细信息,如:姓名,电话,住址等信息
NSString *firstName = (__bridge NSString *)ABRecordCopyValue(people, kABPersonFirstNameProperty);
NSString *lastName = (__bridge NSString *)ABRecordCopyValue(people, kABPersonLastNameProperty);
ABMutableMultiValueRef *phoneNumRef = ABRecordCopyValue(people, kABPersonPhoneProperty);
NSString *phoneNumber = ((__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(phoneNumRef)).lastObject;
[contacts addObject:@{@"name": [firstName stringByAppendingString:lastName], @"phoneNumber": phoneNumber}];
}
return contacts;
} else {
// 无权限访问
NSLog(@"无权限访问通讯录");
return nil;
}
}
-
效果
![phone11]()