天天看點

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(@"拒絕通路通訊錄");
}