2011-09-28 64 views
1

我目前正在編寫一個應用程序,它應該使用戶能夠修改應用程序中的聯繫人詳細信息(主要是數字),然後這些修改應直接反映到通訊簿中。如何以編程方式修改通訊錄中的聯繫人號碼?

我在互聯網上徹底搜索,但我發現的所有例子是加載聯繫人或添加新的聯繫人,但沒有修改現有的聯繫人。

也如何獲得單個聯繫人的所有電話號碼列表,以防他存儲了多個號碼。

謝謝。

回答

0

要允許用戶直接編輯其詳細信息,請參見Apple's documentation on displaying and editing a person record。最初的部分是「設置委託,它必須採用ABPersonViewControllerDelegate協議。爲了允許用戶編輯記錄,請將allowsEditing設置爲YES。」

例如:

不是設置allowsEditing
ABPersonViewController *personViewController = [[ABPersonViewController alloc] init]; 
personViewController.personViewDelegate = self; 
personViewController.allowsEditing = YES; 

其他,因爲如果沒有編輯,顯示一個人的詳細信息所需的代碼是完全一樣的。 (這個代碼是從this answer得出的,它顯示了一個關於從地址簿中刪除聯繫人的更完整的例子。)

但是,我看到你的標題是指以編程方式這樣做。蘋果公司的Address Book Programing Guide for iOS稱:「請記住,地址簿數據庫最終歸用戶所有,因此應用程序必須小心,不要做出意想不到的改變,一般來說,改變應該由用戶發起或確認。」

但是,這是可能的。以下示例出現在該文檔的第17頁上:

ABRecordRef aRecord = ABPersonCreate(); 
CFErrorRef anError = NULL; 
bool didSet; 

didSet = ABRecordSetValue(aRecord, kABPersonFirstNameProperty, CFSTR("Katie"), &anError); 
if (!didSet) {/* Handle error here. */} 

didSet = ABRecordSetValue(aRecord, kABPersonLastNameProperty, CFSTR("Bell"), &anError);  
if (!didSet) {/* Handle error here. */} 

CFStringRef firstName, lastName; 
firstName = ABRecordCopyValue(aRecord, kABPersonFirstNameProperty); 
lastName = ABRecordCopyValue(aRecord, kABPersonLastNameProperty); 
/* ... Do something with firstName and lastName. ... */ 

CFRelease(aRecord); 
CFRelease(firstName); 
CFRelease(lastName); 
相關問題