//访问通讯录
- (void)visitAddressBook
{
CNContactStore *contactStore = [[CNContactStore alloc] init];
if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusNotDetermined) {//首次访问通讯录会调用
[contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (error) return;
if (granted) {//允许
NSLog(@"授权访问通讯录");
[self getContactsInfo:contactStore];//访问通讯录
}else{//拒绝
NSLog(@"拒绝访问通讯录");//访问通讯录
}
}];
}else{
[self getContactsInfo:contactStore];//访问通讯录
}
}
//获取联系人信息
- (void)getContactsInfo:(CNContactStore *)contactStore
{
if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusAuthorized) {//有权限访问
NSError *error = nil;
//创建数组,必须遵守CNKeyDescriptor协议,放入相应的字符串常量来获取对应的联系人信息
NSArray <id<CNKeyDescriptor>> *keysToFetch = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey];
//创建获取联系人的请求
CNContactFetchRequest *fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:keysToFetch];
//遍历查询
[contactStore enumerateContactsWithFetchRequest:fetchRequest error:&error usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
if (!error) {
NSString *familyName = contact.familyName; //姓
NSString *givenName = contact.givenName; //名字
NSString *phoneNumber = ((CNPhoneNumber *)(contact.phoneNumbers.lastObject.value)).stringValue;//电话
NSData *imageData = contact.imageData; //头像
NSString *name = [NSString stringWithFormat:@"%@%@",familyName,givenName];
ContactModel *contactModel = [[ContactModel alloc] init];
contactModel.name = name;
contactModel.telephone = phoneNumber;
contactModel.avator = [UIImage imageWithData:imageData];
[arrContacts addObject:contactModel];
}else{
NSLog(@"error:%@", error.localizedDescription);
}
}];
}else{//无权限访问
NSLog(@"拒绝访问通讯录");
}
}
iOS 获取通讯录的数据
于 2016-06-23 09:13:55 首次发布