【发布时间】:2014-12-01 12:08:05
【问题描述】:
我创建了一个自定义通讯簿,它复制了带有联系人的本地通讯簿列表。现在,在详细视图控制器中,我设法添加了一个新联系人并从本机通讯录中删除了一个现有联系人。我想编辑现有联系人并将更改保存到本机通讯录。
【问题讨论】:
标签: ios objective-c abaddressbook abpersonviewcontroller
我创建了一个自定义通讯簿,它复制了带有联系人的本地通讯簿列表。现在,在详细视图控制器中,我设法添加了一个新联系人并从本机通讯录中删除了一个现有联系人。我想编辑现有联系人并将更改保存到本机通讯录。
【问题讨论】:
标签: ios objective-c abaddressbook abpersonviewcontroller
以下示例假设您在recordID 中拥有要更改的记录的ID,
并且您想将其地址更改为存储在addressDictionary 中的新地址。
CFErrorRef error = nil;
const ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions (NULL, &error);
if (addressBookRef != nil) {
ABRecordRef record = ABAddressBookGetPersonWithRecordID(addressBookRef, recordID);
if (record != nil) {
ABMultiValueRef addressesRef = ABRecordCopyValue(record, kABPersonAddressProperty);
if (addressesRef != nil) {
// Addresses found
ABMutableMultiValueRef tmpAddressesRef = ABMultiValueCreateMutableCopy(addressesRef);
if (tmpAddressesRef != nil) {
CFIndex addressIndex = ABMultiValueGetIndexForIdentifier (addressesRef,addressID);
bool OK;
OK = ABMultiValueReplaceValueAtIndex(tmpAddressesRef, (__bridge CFTypeRef)addressDictionary, addressIndex);
if (OK) {
OK = ABRecordSetValue(record, kABPersonAddressProperty, tmpAddressesRef, &error);
if (OK) {
OK = ABAddressBookSave(addressBookRef, &error);
if (OK) {
// Do something
} else {
// Could not save address book
}
} else {
// Could not store modified address
}
}
else {
// Could not replace address
}
CFRelease(tmpAddressesRef);
} // Mutable copy of addresses could be created
else {
// Could not create mutable copy of addresses
}
CFRelease(addressesRef);
} else {
// Did not find addresses
}
} else {
// Could not read record
}
CFRelease(addressBookRef);
}
else {
// Could not open address book
}
【讨论】: