`
lizaochengwen
  • 浏览: 644071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IOS开发 - AddressBook 电话簿的操纵

 
阅读更多
访问地址簿和单个联系人数据的接口是基于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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics