登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

查看: 500|回复: 6

IOS开发教程――通讯录,ios11通讯录

[复制链接]

245

主题

518

帖子

2259

金钱

手工艺人

发表于 2017-12-27 14:22:01 | 显示全部楼层 |阅读模式

        

        IOS开发教程——通讯录。iOS中带有一个Contacts应用程序来管理联系人,但是有些时候我们希望自己的应用能够访问或者修改这些信息,这个时候就要用到AddressBook.framework框架。iOS中的通讯录是存储在数据库中的,由于iOS的权限设计,开发人员是不允许直接访问通讯录数据库的,必须依靠AddressBook提供的标准API来实现通讯录操作。通过AddressBook.framework开发者可以从底层去操作AddressBook.framework的所有信息,但是需要注意的是这个框架是基于C语言编写的,无法使用ARC来管理内存,开发者需要自己管理内存。下面大致介绍一下通讯录操作中常用的类型:

        ABAddressBookRef:代表通讯录对象,通过该对象开发人员不用过多的关注通讯录的存储方式,可以直接以透明的方式去访问、保存(在使用AddressBook.framework操作联系人时,所有的增加、删除、修改后都必须执行保存操作,类似于Core Data)等。

        ABRecordRef:代表一个通用的记录对象,可以是一条联系人信息,也可以是一个群组,可以通过ABRecordGetRecordType()函数获得具体类型。如果作为联系人(事实上也经常使用它作为联系人),那么这个记录记录了一个完整的联系人信息(姓名、性别、电话、邮件等),每条记录都有一个唯一的ID标示这条记录(可以通过ABRecordGetRecordID()函数获得)。

        ABPersonRef:代表联系人信息,很少直接使用,实际开发过程中通常会使用类型为“kABPersonType”的ABRecordRef来表示联系人(由此可见ABPersonRef其实是一种类型为“kABPersonType”的ABRecordRef)

        ABGroupRef:代表群组,与ABPersonRef类似,很少直接使用ABGroupRef,而是使用类型为“kABGroupType”的ABRecordRef来表示群组,一个群组可以包含多个联系人,一个联系人也同样可以多个群组。

        由于通讯录操作的关键是对ABRecordRef的操作,首先看一下常用的操作通讯录记录的方法:

        ABPersonCreate(): 创建一个类型为“kABPersonType”的ABRecordRef。

        ABRecordCopyValue(): 取得指定属性的值。

        ABRecordCopyCompositeName(): 取得联系人(或群组)的复合信息(对于联系人则包括:姓、名、公司等信息,对于群组则返回组名称)。

        ABRecordSetValue(): 设置ABRecordRef的属性值。注意在设置ABRecordRef的值时又分为单值属性和多值属性:单值属性设置只要通过ABRecordSetValue()方法指定属性名和值即可;多值属性则要先通过创建一个ABMutableMultiValueRef类型的变量,然后通过ABMultiValueAddValueAndLabel()方法依次添加属性值,最后通过ABRecordSetValue()方法将ABMutableMultiValueRef类型的变量设置为记录值。

        ABRecordRemoveValue(): 删除指定的属性值。

        注意:

        由于联系人访问时(读取、设置、删除时)牵扯到大量联系人属性,可以到ABPerson.h中查询或者直接到帮助文档&ldquoersonal Information Properties”

        通讯录的访问步骤一般如下:

        调用ABAddressBookCreateWithOptions()方法创建通讯录对象ABAddressBookRef。

        调用ABAddressBookRequestAccessWithCompletion()方法获得用户授权访问通讯录。

        调用ABAddressBookCopyArrayOfAllPeople()、ABAddressBookCopyPeopleWithName()方法查询联系人信息。

        读取联系人后如果要显示联系人信息则可以调用ABRecord相关方法读取相应的数据;如果要进行修改联系人信息,则可以使用对应的方法修改ABRecord信息,然后调用ABAddressBookSave()方法提交修改;如果要删除联系人,则可以调用ABAddressBookRemoveRecord()方法删除,然后调用ABAddressBookSave()提交修改操作。

        也就是说如果要修改或者删除都需要首先查询对应的联系人,然后修改或删除后提交更改。如果用户要增加一个联系人则不用进行查询,直接调用ABPersonCreate()方法创建一个ABRecord然后设置具体的属性,调用ABAddressBookAddRecord方法添加即可。

        下面就通过一个示例演示一下如何通过ABAddressBook.framework访问通讯录,这个例子中通过一个UITableViewController模拟一下通讯录的查看、删除、添加操作。

        主控制器视图,用于显示联系人,修改删除联系人:

        KCContactViewController.h

        //

        // KCTableViewController.h

        // AddressBook

        //

        // Created by Kenshin Cui on 14/04/05.

        // Copyright (c) 2014年 cmjstudio. All rights reserved.

        //

        #import

        /**

        * 定义一个协议作为代理

        */

        @protocol KCContactDelegate

        //新增或修改联系人

        -(void)editPersonWithFirstName: (NSString *)firstName lastName: (NSString *)lastName workNumber: (NSString *)workNumber;

        //取消修改或新增

        -(void)cancelEdit;

        @end

        @interface KCContactTableViewController :  UITableViewController

        @end

        KCContactViewController.m

        //

        // KCTableViewController.m

        // AddressBook

        //

        // Created by Kenshin Cui on 14/04/05.

        // Copyright (c) 2014年 cmjstudio. All rights reserved.

        //

        #import "KCContactTableViewController.h"

        #import

        #import "KCAddPersonViewController.h"

        @interface KCContactTableViewController ()

        @property (assign,nonatomic) ABAddressBookRef addressBook;//通讯录

        @property (strong,nonatomic) NSMutableArray *allPerson;//通讯录所有人员

        @property (assign,nonatomi

0

主题

7074

帖子

-521

金钱

限制会员

发表于 2017-12-27 14:22:24 | 显示全部楼层
帮帮顶顶!!

20

主题

7100

帖子

2375

金钱

手工艺人

发表于 2017-12-27 14:22:50 | 显示全部楼层
感谢分享,code4app有你更精彩

23

主题

7098

帖子

1054

金钱

iOS大神

Rank: 6Rank: 6

分享大神

发表于 2017-12-27 14:23:16 | 显示全部楼层
写的真的很不错

21

主题

7129

帖子

2415

金钱

手工艺人

发表于 2017-12-27 14:23:28 | 显示全部楼层
小弟学习了~支持,支持

16

主题

7124

帖子

1174

金钱

手工艺人

发表于 2017-12-27 14:24:21 | 显示全部楼层
code4app好的代码demo真的很多,谢谢啦~

14

主题

7077

帖子

1475

金钱

手工艺人

发表于 2017-12-27 14:27:08 | 显示全部楼层
感谢分享,code4app有你更精彩
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

每日头条

通过邮件订阅最新 Code4App 信息
上一条 /4 下一条

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表