我目前正在編寫一個應用程序,它應該使用戶能夠修改應用程序中的聯繫人詳細信息(主要是數字),然後這些修改應直接反映到通訊簿中。如何以編程方式修改通訊錄中的聯繫人號碼?
我在互聯網上徹底搜索,但我發現的所有例子是加載聯繫人或添加新的聯繫人,但沒有修改現有的聯繫人。
也如何獲得單個聯繫人的所有電話號碼列表,以防他存儲了多個號碼。
謝謝。
我目前正在編寫一個應用程序,它應該使用戶能夠修改應用程序中的聯繫人詳細信息(主要是數字),然後這些修改應直接反映到通訊簿中。如何以編程方式修改通訊錄中的聯繫人號碼?
我在互聯網上徹底搜索,但我發現的所有例子是加載聯繫人或添加新的聯繫人,但沒有修改現有的聯繫人。
也如何獲得單個聯繫人的所有電話號碼列表,以防他存儲了多個號碼。
謝謝。
要允許用戶直接編輯其詳細信息,請參見Apple's documentation on displaying and editing a person record。最初的部分是「設置委託,它必須採用ABPersonViewControllerDelegate協議。爲了允許用戶編輯記錄,請將allowsEditing設置爲YES。」
例如:
不是設置allowsEditingABPersonViewController *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);