iOS通讯录开发

作者: 奇董 | 来源:发表于2015-12-10 17:52 被阅读845次

    今天正好用到通讯录,总结一下使用过程.
    首先苹果的通讯录是保存在数据库里面的,苹果不允许开发者直接访问数据库.不过可以通过访问AddressBook的接口来完成读取通讯录的操作.

    AddressBook.framework是基于c写的,必须自己手动内存管理.
    coreFundation 通讯录里的对象大多数都是cf对象 后缀以ref结尾
    因为是基于C的所以不能使用 ARC 要自己手动内存管理.

    通讯录开发中用到的基本对象
    ABAddressBookRef:代表通讯录对象,通过该对象开发人员不用过多的关注通讯录的存储方式,可以直接以透明的方式去访问、保存(在使用AddressBook.framework操作联系人时,所有的增加、删除、修改后都必须执行保存操作,类似于Core Data)等。
    ABRecordRef:代表一个通用的记录对象,可以是一条联系人信息,也可以是一个群组,可以通过ABRecordGetRecordType()函数获得具体类型。如果作为联系人(事实上也经常使用它作为联系人),那么这个记录记录了一个完整的联系人信息(姓名、性别、电话、邮件等),每条记录都有一个唯一的ID标示这条记录(可以通过ABRecordGetRecordID()函数获得)。
    ABPersonRef:代表联系人信息,很少直接使用,实际开发过程中通常会使用类型为“kABPersonType”的ABRecordRef来表示联系人(由此可见ABPersonRef其实是一种类型为“kABPersonType”的ABRecordRef)
    ABGroupRef:代表群组,与ABPersonRef类似,很少直接使用ABGroupRef,而是使用类型为“kABGroupType”的ABRecordRef来表示群组,一个群组可以包含多个联系人,一个联系人也同样可以多个群组。

    基本操作
    通讯录的访问步骤一般如下:

    调用ABAddressBookCreateWithOptions()方法创建通讯录对象ABAddressBookRef。
    调用ABAddressBookRequestAccessWithCompletion()方法获得用户授权访问通讯录。
    调用ABAddressBookCopyArrayOfAllPeople()、ABAddressBookCopyPeopleWithName()方法查询联系人信息。
    读取联系人后如果要显示联系人信息则可以调用ABRecord相关方法读取相应的数据;如果要进行修改联系人信息,则可以使用对应的方法修改ABRecord信息,然后调用ABAddressBookSave()方法提交修改;如果要删除联系人,则可以调用ABAddressBookRemoveRecord()方法删除,然后调用ABAddressBookSave()提交修改操作。
    也就是说如果要修改或者删除都需要首先查询对应的联系人,然后修改或删除后提交更改。如果用户要增加一个联系人则不用进行查询,直接调用ABPersonCreate()方法创建一个ABRecord然后设置具体的属性,调用ABAddressBookAddRecord方法添加即可。

    我开发的时候遇到要提取通讯录的名的有一个 first middle last name.百度了下first 是名 last是姓 middle 中国人没有不管了

    之后ABRecoderef 保存了用户的信息,需要的信息从里面读取求可以了
    (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
    __bridge 是用于oc对象和cf对象的桥接

    ABAddressBookCopyArrayOfAllPeople(addressBook); 获取所有通讯录用CFArray 接收

    参考:http://www.jianshu.com/p/6acad14cf3c9

    相关文章

      网友评论

      • 一方自在:大神,我的开启用户授权,在模拟器8.1的时候正常,可模拟器换9.1的时候,就连授权的框都没有弹出,直接授权失败,有遇见过吗?
      • 小凡凡520:楼主 方法依然废弃

      本文标题:iOS通讯录开发

      本文链接:https://www.haomeiwen.com/subject/cqryhttx.html