0

連絡先を含むネイティブ アドレス帳リストをコピーするカスタム アドレス帳を作成しました。さて、ビューコントローラーの詳細で、新しい連絡先を追加し、ネイティブアドレス帳から既存の連絡先を削除することができました。既存の連絡先を編集し、ネイティブ アドレス帳に変更を保存したいと考えています。

4

1 に答える 1

0

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
}
于 2014-12-01T12:47:55.203 に答える