上篇博文简要的介绍了如何使用AddessBook.framework
来获取系统通讯录,但有时候又想对其做修改怎么办,那么这篇博文就总结一下如何修改系统的通讯录吧。
代码GitHub:https://github.com/YRunIntoLove/YAddressBookUIDemo
修改系统通讯录的方法
两种方法
- 通过
AddressBook.framework
的各种函数来完成对AddressBook的操作。 - 通过
AddressBookUI.framework
中提供的系统UIViewController完成对AddressBook的操作,我们只需要使用这几个控制器,传入相应的参数并实现响应的协议方法就可以完成。
方法看法
以上两种方法,初学者估计不会有人想用第一种,那么个人就来谈谈对这两种方法的看法:
- 方法比较繁琐,需要一定量的代码来完成,适合自定义UI布局来完成,相对的比较灵活。
- 仅需要弹出系统的控制器,传入相应的参数并实现协议方法,就可以完成对通讯录的操作,代码量较少,但UI会固定成系统通讯录的样式,用法简单但布局不灵活。
通过AddressBook.framework实现
实例化对象
实例化一个需要添加的Person属性,当然,如果是修改,那么就获取该属性喽,怎么获取可是上一篇博文介绍的呢
//实例化一个Person数据
ABRecordRef person = ABPersonCreate();
//这里因为没有addressBook属性,所以需要创建一个
ABAddressBookRef addressBook = ABAddressBookCreate();
//实例化一个CFErrorRef属性,如果实例化,下面的设置为NULL即可
CFErrorRef error = NULL;
修改联系人属性的方法
/**
* 新增或修改(覆盖原值的过程)ABRecordRef中某个属性的方法
*
* record 新增或修改属性的person实例
* property 属性的key值,比如kABPersonFirstNameProperty..
*/
bool ABRecordSetValue(ABRecordRef record, ABPropertyID property, CFTypeRef value, CFErrorRef* error);
/**
* 删除ABRecordRef中某个属性的方法
*
* record 删除属性的person实例
* property 属性的key值,比如kABPersonFirstNameProperty..
*/
bool ABRecordRemoveValue(ABRecordRef record, ABPropertyID property, CFErrorRef* error);
修改通讯录的方法
//添加联系人的方法
bool ABAddressBookAddRecord(ABAddressBookRef addressBook, ABRecordRef record, CFErrorRef* error);
//删除联系人的方法
bool ABAddressBookRemoveRecord(ABAddressBookRef addressBook, ABRecordRef record, CFErrorRef* erro);
修改完毕
//添加联系人
if (ABAddressBookAddRecord(addressBook, person, &error) == true)
{
//成功就需要保存一下
ABAddressBookSave(addressBook, &error);
}
//不要忘记了释放资源
CFRelease(person);
CFRelease(addressBook);
具体实例
添加联系人的姓名属性
/*添加联系人姓名属性*/
ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge CFStringRef)@"Wen", &error); //名字
ABRecordSetValue(person, kABPersonLastNameProperty, (__bridge CFStringRef)@"Yue", &error); //姓氏
ABRecordSetValue(person, kABPersonMiddleNameProperty,(__bridge CFStringRef)@"YW", &error); //名字中的信仰名称(比如Jane·K·Frank中的K
ABRecordSetValue(person, kABPersonPrefixProperty,(__bridge CFStringRef)@"W", &error); //名字前缀
ABRecordSetValue(person, kABPersonSuffixProperty,(__bridge CFStringRef)@"Y", &error); //名字后缀
ABRecordSetValue(person, kABPersonNicknameProperty,(__bridge CFStringRef)@"", &error); //名字昵称
ABRecordSetValue(person, kABPersonFirstNamePhoneticProperty,(__bridge CFStringRef)@"Wen", &error);//名字的拼音音标
ABRecordSetValue(person, kABPersonLastNamePhoneticProperty,(__bridge CFStringRef)@"Yue", &error); //姓氏的拼音音标
ABRecordSetValue(person, kABPersonMiddleNamePhoneticProperty,(__bridge CFStringRef)@"