iOS-----使用AddressBook管理連絡人,iosaddressbook

來源:互聯網
上載者:User

iOS-----使用AddressBook管理連絡人,iosaddressbook
使用AddressBook管理連絡人

iPhone手機通常都是內建的Contacts應用,包括所有連絡人的性(last name)、名(first name)、電話、E-mail地址、住址、生日等各種個人資訊.Contacts的資料將儲存在自己的應用程式沙箱中,其他應用不能訪問它們.

為了能訪問iPhone手機儲存的連絡人資訊,iOS系統提供了如下兩個架構.

AddressBook.framework

通過該架構提供的系列函數,我們可以開發程式介面對手機中的連絡人資訊進行增、刪、改、查。

AddressBookUI.framework

該架構以AddressBook.framework為基礎,它直接包含4個視圖控制器類以及相應的委託協議.這些特殊的視圖控制器提供了預設的使用者介面對手機中的連絡人資訊進行操作,開發人員只要建立這些視圖控制器的執行個體並顯示出來即可.

下面AddressBook架構的用法

AddressBook架構主要由如下4組API組成

ABAddressBook

ABAddressBook執行個體代表地址 簿 對象,該對象提供了一個通用的編程介面,允許我們無須理會連絡人資訊在底層資料庫中的儲存方式,直接以透明的方式來訪問這些連絡人的資訊.實際編程時,總是面向ABAddressBook的指標(ABAddressBookRef)編程

ABRecord

ABRecord代表一個通用的記錄對象,該記錄對象包含了大量的通用的資料(如連絡人的姓(last  name)、名(first name)、電話、郵件等)。

 

  每條記錄在底層資料庫中都有一個唯一的ID,可通過ABRecordGetRecordID()函數擷取指定記錄的ID.

  可通過ABRecordGetRecordType()函數擷取該記錄的類型

  該記錄是連絡人,則該函數返回kABPersonType(0)枚舉值;

  該記錄組,則該函數返回kABGroupType(1)枚舉值.

  實際編程時,總是面向ABRecord的指標(ABRecordRef)編程.

ABPerson

ABPerson代表連絡人資訊.通常使用類型為”kABPersonType”的ABRecordRef表示連絡人資訊.連絡人資訊儲存了該連絡人的姓、名、地址、電子郵件和電話號碼等,可使用視圖控制器(如ABPersonViewController)顯示這些連絡人資訊.

ABGroup

ABGroup代表組.通常使用類型為”kABGroupType”的ABRecordRef表示組.一個連絡人可以屬於多個組,一個組也可以包含多個連絡人.

ABAddressBook架構,是一種面向過程的操作方式,該架構4組API提供了大量函數.

 

 

總結:

   ABAddressBook的函數只負責對地址簿進行管理,包括建立地址簿、向地址簿中添加記錄、從地址簿中刪除記錄等。除此之外,還包括判斷使用者是否允許訪問地址簿,以及對地址簿的修改進行儲存或丟棄修改。

為了向地址簿中添加記錄,或從地址簿中刪除記錄,都需要使用ABRecordRef,ABRecord所提供的函數主要用於訪問ABRecord本身所包含的大量屬性。

每個ABRecord由多個屬性群組成,連絡人的姓、名、電話、郵件等都屬於ABRecord的屬性。

 

ABRecord提供了如下常用函數。

bool ABRecordSetValue(ABRecordRef  record,ABPropertyID property, CFTypeRef value,  CFErrorRef *error )

將record記錄中的property屬性設為“value”。其中property必須是由ABPerson、ABGroup定義的常量,用於表示預置的各種屬性,而且不同屬性需要的屬性值不同。

連絡人的名字,對應於kABPersonFirstNameProperty常量,這種類型的屬性只需要字串值即可;

連絡人的電話,對應於kABPersonPhoneProperty常量,這種類型的屬性則需要ABMutableMultiValue值.

CFTypeRef ABRecordCopyValue(ABRecordRef  record,  ABPropertyID  property)

該函數返回record中property屬性的值.

bool ABRecordRemoveValue(ABRecordRef  record, ABPropertyID property, CFErrorRef *error )

該函數刪除record記錄中property屬性的值,返回刪除是否成功.

CFStringRef  ABRecordCopyCompositeName(ABRecordRef  record):

該函數返回record記錄中複合姓名資訊(包括姓\名\組織等資訊).

ABRecordID ABRecordGetRecordID(ABRecordRef  record)

該函數來擷取該記錄的ID

ABRecordType  ABRecordGetRecordType(ABRecordRef  record)

該函數來擷取該記錄的類型(連絡人記錄或組記錄)

總結:

ABRecord的函數主要用於操作記錄所包含的屬性,如果程式要建立或得到已有的記錄,則需要藉助於ABPerson、ABGroup提供的函數.

ABPerson提供了大量擷取類型為”kABPersonType”的ABRecord的函數,這些函數即可建立一個空的ABRecord,用於向地址簿中添加新的記錄,也可從地址薄中擷取滿足特定條件的ABRecord,包括根據ID擷取、根據人名擷取等,這些從地址薄中擷取的ABRecord可以被刪改或修改。

ABGroup提供了大量擷取類型為“kABGroupType”的ABRecord的函數,ABGroup包含的函數,既可以建立新的ABRecord,也可從資料庫載入ABRecord。

ABMutableMultiValue提供了如下常用函數

ABMutableMultiValueRef ABMultiValueCreateMutable(ABPropertyType type):

建立一個管理ABPropertyType類型的屬性值的ABMutableMultiValue

bool ABMultiValueAddValueAndLabel(ABMutableMultiValueRef multiValue, CFTypeRef  value, CFStringRef  label, ABMultiValueIdentifier *outIdentifier):

向multiValue中添加一個屬性值.value代表屬性值,label代表屬性值的標籤(比如電話號碼,可設定”家庭”、“工作”等label)

 

bool  ABMultiValueReplaceValueAtIndex(ABMutableMultiValueRef multiValue, CFTypeRef  value, CFIndex  index)

將multiValue中index索引處的屬性值替換為新的value

bool  ABMultiValueReplaceLabelAtIndex(ABMutableMultiValueRef multiValue,CFStringRef  label,CFIndex index)

將multiValue中index索引處的屬性標籤替換為新的label

bool  ABMultiInsertValueAndLabelAtIndex(ABMutableMultiValueRef  multiValue,CFTypeRef  value, =CFStringRef label,CFIndex  index,ABMultiValueIdentifier *outIdentifier)

向multiValue的index索引處插入一個屬性值.value代表屬性值,label代表屬性值的標籤.

bool  ABMultiValueRemoveValueAndLabelAtIndex(ABMutableMultiValueRef  multiValue,CFIndex  index)

刪除multiValue中index索引處的屬性值(同時刪除屬性值和屬性值標籤).

刪除連絡人

刪除連絡人很簡單,只要如下幾步

 

1

建立ABAddressBookRef,這就得到了對地址簿的引用

2

擷取將要被刪除的ABRecordRef,這就得到了要被刪除記錄的引用

3

調用ABAddressBookRemoveRecord()函數刪除指定記錄

4

調用ABAddressBookSave()函數將刪除操作儲存到底層地址簿中

代碼

@implementation LCViewController- (void)viewDidLoad{   [super viewDidLoad];} - (IBAction)deletePerson:(id)sender{  CFErrorRef  error = nil;  // 建立ABAddressBook,該函數的第1參數暫時並未使用,直接傳入NULL即可ABAddressBookRef  ab  =  ABAddressBookCreateWithOptions(NULL, &error);if(!error){  // 請求訪問使用者地址簿ABAddressBookRequestAccessWithCompletion(ab, ^(bool  granted, CFErrorRef  error){ // 如果使用者允許訪問地址簿if(granted){  // 從地址簿中擷取ID為3的記錄 ABRecordRef  rec = ABAddressBookGetPersonWithRecordID(ab, 3); BOOL result = ABAddressBookRemoveRecord(ab, rec, NULL);  if(result){    // 將程式所做的修改儲存到地址簿中,如果儲存成功if(ABAddressBookSave(ab, NULL))   {     [self showAlert:@”成功刪除ID為3的連絡人”];}else{      [self showAlert:@”儲存修改時出現的錯誤”];}}else{   [self showAlert:@”刪除失敗”];}} });}}- (void) showAlert:(NSString*)msg{  // 使用UIAlertView顯示msg資訊 [[[UIAlertView alloc] initWithTitle:@”提示” message:msg delegate:nil  cancelButtonTitle:@”確定”  otherButtonTitles:nil] show];}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.