iPhone應用開發ABAddressBook相關API使用經驗

來源:互聯網
上載者:User

iPhone應用開發ABAddressBook相關API使用經驗是本文要介紹的內容,iPhone應用開發時,在 ABAddressBook 通訊錄操作時遇到的各種問題與解決方案的知識匯總,十分難得的經驗總結。最近在研究這個東西,並且提交了程式。因為用了以下代碼而被reject。

1、mABPersonViewController = [[ABPersonViewController alloc] init];

2、[mABPersonViewController setAllowsDeletion:YES];

於是研究自己實現同樣功能,於是也發現了API裡有問題……

備忘錄:

1、不要傳遞ABRecordRef,要堅持使用RecordID。比如下面代碼

 
  1. ABRecordRef recordRef = ABAddressBookGetPersonWithRecordID(addressBookRef,ABRecordGetRecordID([mPersonViewController displayedPerson])); 

你會發現,recordRef和[mPersonViewController displayedPerson]的地址不一定是相同的。這裡mPersonViewController是任何一個 ABPersonViewController的執行個體,addressBookRef是你正在操作的AddressBook複本。因為它們來自不同的 AddressBook複本,所以地址不同,所以無法相互混用。

2、ABAddressBookHasUnsavedChanges,這 個函數是沒有用的,總是返回NO。搜google搜很久了,才發現這個函數原來是無效的。從iPhone OS 2.x版本開始到現在3.x還依然存在這個問題。

3、還有一個bug是,即便我沒有用setAllowsDeletion:YES這個非 法設定,使用以下代碼時還是可以看到刪除連絡人的按鈕的。

 
  1. - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
  2. shouldContinueAfterSelectingPerson:(ABRecordRef)person{  
  3.         [personViewController setDisplayedPerson:person];  
  4.        [personViewController setEditing:YES];  
  5.         [peoplePicker pushViewController:personViewController animated:YES];  
  6.     }  
  7.    return NO;  

上面代碼執 行後,開啟的連絡人詳細資料的介面,是正在編輯的介面,而且底部帶有刪除按鈕……但是,通過任何其他方法都無法實現這個效果。比如點“編輯”按鈕 時把當前ABPersonViewController設定成setEditing:YES,是沒有刪除按鈕的……

問題:

因為 ABAddressBookHasUnsavedChanges總是返回NO,所以我通過判斷ABAddressBookRemoveRecord是否返 回YES來判斷通訊錄是否被修改。是的話,直接ABAddressBookSave。

但是,有時候會出現如下錯誤,google裡搜尋這個關鍵詞 的結果為0。

 
  1. sqlite3 error in CPRecordStoreSaveWithPreAndPostCallbacksAndTransactionType: cannot commit - no transaction is active 

後來嘗試下面這個之前提到的非法代碼,測試後發現,使用官方的“刪除連絡人”按鈕也會有這個錯誤提示……於是我就納悶了……不知道大家是怎麼解決這個問題的?

1、mABPersonViewController = [[ABPersonViewController alloc] init];

2、[mABPersonViewController setAllowsDeletion:YES];

另外,要避免通訊錄整個丟失,我總結的規律是
 
1、必須總是使用同一個AddressBook複本,也就 是說,所操作的ABAddressBookRef地址是同一個。避免建立更多的複本,有時候退出程式時就有可能丟失整個資料庫……

2、多線程操作同一個AddressBook複本時,必須避免同時操作。

小結:iPhone應用開發ABAddressBook相關API使用經驗的內容介紹完了,希望通過本文的學習能對你有所協助!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.