IOS开发 - AddressBook 电话簿的操纵

jopen 12年前

访问地址簿和单个联系人数据的接口是基于C语言的函数,接口传递对地址簿各种对象的引用作为参数。管理地址簿中条目的基类对象是 ABRecord。一个 ABRecord 可以表示一个人 或者一个群体 ABGroup 。无论何时,在界面上选中一条记录,或者使用框架进行查询返回一条结果,系统都会返回一个指向 ABRecord 的指针,标示为 ABRecordRef。与地址簿 API 的大部分交互都涉及使用 ABRecordRef 这个引用类型。

常用访问记录的函数如下:

ABRecordID ABRecordGetRecord(ABRecordRef record);

返回 ABRecordID ,代表了 记录在底层数据库中的ID号。具有唯一性。

ABRecordType ABRecordGetRecordType(ABRecordRef record);

返回记录类型。可以是 kABPersonType 和 kABGroupType

CFStringRef 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