IOS開發 - AddressBook 電話簿的操縱

jopen 12年前發布 | 32K 次閱讀 iOS開發 移動開發 IOS

訪問地址簿和單個聯系人數據的接口是基于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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!