天天看点

iOS---iOS9中获取通讯录的方法:Contacts. framework简单使用

1.首先创建CNContactStore对象,主要用来获取和保存通讯录:

//创建CNContactStore对象,用与获取和保存通讯录信息
CNContactStore *contactStore = [[CNContactStore alloc] init];
           

2.用户授权:

if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusNotDetermined) {//首次访问通讯录会调用
[contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (error) return;
if (granted) {//允许
NSLog(@"授权访问通讯录");
[self fetchContactWithContactStore:contactStore];//访问通讯录
}else{//拒绝
NSLog(@"拒绝访问通讯录");//访问通讯录
}
}];
}else{
[self fetchContactWithContactStore:contactStore];//访问通讯录
}
           

3.访问通讯录,访问之前要先判断是否又权限:

if ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusAuthorized) {//有权限访问
NSError *error = nil;
//创建数组,必须遵守CNKeyDescriptor协议,放入相应的字符串常量来获取对应的联系人信息
NSArray <id<CNKeyDescriptor>> *keysToFetch = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey];
//创建获取联系人的请求
CNContactFetchRequest *fetchRequest = [[CNContactFetchRequest alloc] initWithKeysToFetch:keysToFetch];
//遍历查询
[contactStore enumerateContactsWithFetchRequest:fetchRequest error:&error usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
if (!error) {
NSLog(@"familyName = %@", contact.familyName);//姓
NSLog(@"givenName = %@", contact.givenName);//名字
NSLog(@"phoneNumber = %@", ((CNPhoneNumber *)(contact.phoneNumbers.lastObject.value)).stringValue);//电话

}else{
NSLog(@"error:%@", error.localizedDescription);
}
}];
}else{//无权限访问
NSLog(@"拒绝访问通讯录");
}