自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iPhone應用開發(fā)ABAddressBook相關API使用經驗

移動開發(fā) iOS
iPhone應用開發(fā)ABAddressBook相關API使用經驗是本文要介紹的內容,iPhone應用開發(fā)時,在 ABAddressBook 通訊錄操作時遇到的各種問題與解決方法的知識匯總,來看本文詳解

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

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

2、[mABPersonViewController setAllowsDeletion:YES];

于是研究自己實現(xiàn)同樣功能,于是也發(fā)現(xiàn)了API里有問題……

備忘錄:

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

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

你會發(fā)現(xiàn),recordRef和[mPersonViewController displayedPerson]的地址不一定是相同的。這里mPersonViewController是任何一個 ABPersonViewController的實例,addressBookRef是你正在操作的AddressBook復本。因為它們來自不同的 AddressBook復本,所以地址不同,所以無法相互混用。

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

3、還有一個bug是,即便我沒有用setAllowsDeletion:YES這個非 法設置,使用以下代碼時還是可以看到刪除聯(lián)系人的按鈕的。

  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;  

上面代碼執(zhí) 行后,打開的聯(lián)系人詳細信息的界面,是正在編輯的界面,而且底部帶有刪除按鈕……但是,通過任何其他方法都無法實現(xiàn)這個效果。比如點“編輯”按鈕 時把當前ABPersonViewController設置成setEditing:YES,是沒有刪除按鈕的……

問題:

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

但是,有時候會出現(xiàn)如下錯誤,google里搜索這個關鍵詞 的結果為0。

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

后來嘗試下面這個之前提到的非法代碼,測試后發(fā)現(xiàn),使用官方的“刪除聯(lián)系人”按鈕也會有這個錯誤提示……于是我就納悶了……不知道大家是怎么解決這個問題的?

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

2、[mABPersonViewController setAllowsDeletion:YES];

另外,要避免通訊錄整個丟失,我總結的規(guī)律是
 
1、必須總是使用同一個AddressBook復本,也就 是說,所操作的ABAddressBookRef地址是同一個。避免創(chuàng)建更多的復本,有時候退出程序時就有可能丟失整個數(shù)據庫……

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

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

責任編輯:zhaolei 來源: CocoaChina
相關推薦

2011-08-22 14:12:48

iPhone開發(fā)NSTableView

2011-08-09 11:36:41

iPhoneUIPickerVieDEMO

2012-04-26 13:45:20

iPhone應用發(fā)布稅務相關手續(xù)

2011-08-08 13:50:29

iPhone開發(fā) NSOperatio 多線程

2011-08-09 13:22:31

iPhoneSqlite數(shù)據庫

2009-12-31 10:21:53

Silverlight

2011-08-08 14:07:49

iPhone開發(fā) 字體

2011-07-27 10:16:41

iPhone SQLite 數(shù)據庫

2011-08-17 15:10:21

iPhone開發(fā)Web視圖

2011-08-08 16:56:44

iPhone 字符處理 視圖

2011-08-08 10:10:14

iPhone開發(fā) 圖片 方法

2011-08-09 17:29:29

iPhone文件屏幕

2011-08-10 10:10:21

iPhoneUIPopoverCo

2011-07-19 09:46:38

2011-07-08 14:58:16

iPhone Xcode iOS

2011-07-19 09:58:36

2011-08-09 13:10:32

iPhone地圖開發(fā)

2011-08-11 10:03:43

iPhonecocoaNSRunLoop

2011-08-05 14:48:06

iPhone應用 異步隊列

2011-08-10 17:37:00

iPhoneASIHTTPRequ
點贊
收藏

51CTO技術棧公眾號