iOS中操作通讯录是需要请求用户的授权的,如果没有得到用户的授权,就没有下文的。对于一些app很恶心,请求得到用户的授权后,给用户的通讯录中插入广告信息,比如常见的就是日历。
回到我们的话题,今天做到这个么小需求,需要添加N条手机号到通讯录,同样也要能清空通讯录。在完成后, 将这两段代码片段记录下来,供大家参考!
下面是添加到通讯录的一段代码片段,这里只是手机号作为firstName,功能很单一,具体要添加多个值需要自己去添加!
CFErrorRef error = NULL; //创建一个通讯录操作对象 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if (granted && !error) { for (NSUInteger i = 0; i < self.textField.text.integerValue && i < count; ++i) { @autoreleasepool { // 创建一条新的联系人纪录 ABRecordRef newRecord = ABPersonCreate(); // 为新联系人记录添加属性值 ABRecordSetValue(newRecord, kABPersonFirstNameProperty, (__bridge CFTypeRef)self.phoneArray[i], &error); //创建一个多值属性 ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType); ABMultiValueAddValueAndLabel(multi, (__bridge CFTypeRef)self.phoneArray[i], kABPersonPhoneMobileLabel, NULL); //将多值属性添加到记录 ABRecordSetValue(newRecord, kABPersonPhoneProperty, multi, &error); //添加记录到通讯录操作对象 ABAddressBookAddRecord(addressBook, newRecord, &error); CFRelease(newRecord); CFRelease(multi); } } //保存通讯录操作对象 ABAddressBookSave(addressBook, &error); CFRelease(addressBook); }
下面是一段清空通讯录的代码片段,一定要小心哦,清空前一定要慎重!
CFErrorRef error = NULL; //创建一个通讯录操作对象 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if (granted && !error) { CFArrayRef personArray = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex personCount = ABAddressBookGetPersonCount(addressBook); if (personCount <= 0) { dispatch_async(dispatch_get_main_queue(), ^{ [SVProgressHUD showSuccessWithStatus:@"清空通讯录成功"]; }); return; } for (int i = 0; i < personCount; i++) { ABRecordRef ref = CFArrayGetValueAtIndex(personArray, i); // 删除联系人 ABAddressBookRemoveRecord(addressBook, ref, nil); } // 保存通讯录操作对象 ABAddressBookSave(addressBook, &error); CFRelease(addressBook); dispatch_async(dispatch_get_main_queue(), ^{ if (!error) { [SVProgressHUD showSuccessWithStatus:@"清空通讯录成功"]; } else { [SVProgressHUD showErrorWithStatus:@"清空通讯录失败"]; } }); } });
iOS9.0以后ABAddressBook这个framework被废弃了,推荐的是CNContact这个类来处理。不过我们都需要兼容9.0以下版本,所以现在不用管它。
承接:ThinkPHP项目开发、网站项目开发、微信项目开发、微信小程序项目开发、App开发,欢迎联系标哥QQ632840804