iOS 获取通讯录的数据

//访问通讯录
- (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(@"拒绝访问通讯录");
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值