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

相关文章

  • iOS开发系列--通讯录、蓝牙、内购、GameCenter、iC

    iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总http...

  • iOS学习笔记29-系统服务(二)通讯录

    一、通讯录 iOS中的通讯录是存储在数据库中的,由于iOS的权限设计,开发人员是不允许直接访问通讯录数据库的,实现...

  • ios9下vue使用踩坑记录

    问题描述 使用vue开发单页的通讯录选择器组件后。 在iOS 10 和 iOS 8下都正常运行。 就在iOS 9下...

  • iOS13&Xcode11适配问题

    1.通讯录权限问题iOS 13中将禁止应用开发者访问用户通讯录备注信息,需将keys中的CNContactNote...

  • iOS通讯录开发

    场景一:直接选择一个联系人的电话号码 这里不需要先获取所有的联系人自己做联系人列表,直接使用系统自带的Addres...

  • iOS通讯录开发

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

  • iOS通讯录开发

    苹果允许访问用户的通讯录,提供的api分为两种,区别在于有没有UI界面,工作中一般都会选用有UI界面,从iOS6开...

  • iOS通讯录开发

    前言 记录下在应用内获取通讯录的相关知识点,涉及到通讯录权限配置,通讯录数据的获取以及数据按首字母排序。 系统通讯...

  • iOS 中简单通讯录列表的使用

    iOS 中简单通讯录列表的使用 最近开发的App有读取用户通讯录的需要,做完这块功能之后顺便整理了一下流程,如下:...

  • iOS9.0之前和之后获取通讯录的方法

    1. iOS 9.0之前获取通讯录的方法 打印结果: 2. iOS 9.0 及 iOS 9.0之后获取通讯录的方法...

网友评论

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

本文标题:iOS通讯录开发

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