IOS开发 - AddressBook 电话簿的操纵
jopen
13年前
访问地址簿和单个联系人数据的接口是基于C语言的函数,接口传递对地址簿各种对象的引用作为参数。管理地址簿中条目的基类对象是 ABRecord。一个 ABRecord 可以表示一个人 或者一个群体 ABGroup 。无论何时,在界面上选中一条记录,或者使用框架进行查询返回一条结果,系统都会返回一个指向 ABRecord 的指针,标示为 ABRecordRef。与地址簿 API 的大部分交互都涉及使用 ABRecordRef 这个引用类型。
常用访问记录的函数如下:
ABRecordID ABRecordGetRecord(ABRecordRef record);
返回 ABRecordID ,代表了 记录在底层数据库中的ID号。具有唯一性。ABRecordType ABRecordGetRecordType(ABRecordRef record);
返回记录类型。可以是 kABPersonType 和 kABGroupTypeCFStringRef ABRecordCopyCompositeName(ABRecordRef record);
返回个人或群体完整名称。例:NSString* name = (NSString*)ABRecordCopyCompositeName(record);
一、高层地址簿函数
1.获得地址簿句柄
你必须先初始化地址簿,然后才能对其进读写操作。要获得一个地址簿句柄,可以使用 ABAddressBookCreate函数:
#import <AddressBook/AddressBook.h> AddressBookRef ab = AddressBookCreate();
2. 保存地址簿
获得了地址簿的引用就可以对其进行操作了,操作完毕要记得保存:CFErrorRef err; BOOL success = ABAddressBookSave(ab, &err);如果不确定是否需要保存,则可以用:
BOOL hasUnsavedChanges = ABAddressBookHasUnsavedChanges(ab);3.添加/删除 记录
CFErrorRef err; BOOL success =ABAddressBookAddRecord(ab, record, &err);//添加
CFErrorRef err; BOOL success =ABAddressBookRemoveRecord(ab, record, &err);//删除二、查询地址簿
地址簿框架仅仅提供了基本的查询功能。可以用函数根据名字来查询多个记录,或者是根据特定记录 ID 查询单个记录。
1.获取地址簿中记录总个数:CFIndex count = ABAddressBookGetPersonCount(ab); printf("%ld total entries in the address book\n",count);2. 获取所有联系人:
NSArray* array = (NSArray*)ABAddressBookCopyArrayOfAllPeople(ab); printf("Retrieved %d contacts\n",[array count]);3. 在联系人列表中查询一个特定的名字:
NSArray* arrayByName = (NSArray*)ABAddressBookCopyPeopleWithName(ab, CFSTR("Liu Wei"));函数如其名,这个函数返回的并不是地址簿中实际的对象,而是拷贝。要访问这个数组的单个记录,就用NSArray的方法啦:
ABRecordRef myRecord = [arrayByName objectAtIndex:0];除了通过名字查询,你也可以直接通过ID查询(假如你知道ID的话):
ABRecordRef myRecord = ABAddressBookGetPersonWithRecordID(ab, recordID);转自:http://blog.csdn.net/iukey/article/details/7343650