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