【问题标题】:Can i edit an existing contact from ABaddressBook without ABPersonViewController?我可以在没有 ABPersonViewController 的情况下从 ABaddressBook 编辑现有联系人吗?
【发布时间】:2014-12-01 12:08:05
【问题描述】:

我创建了一个自定义通讯簿,它复制了带有联系人的本地通讯簿列表。现在,在详细视图控制器中,我设法添加了一个新联系人并从本机通讯录中删除了一个现有联系人。我想编辑现有联系人并将更改保存到本机通讯录。

【问题讨论】:

    标签: ios objective-c abaddressbook abpersonviewcontroller


    【解决方案1】:

    以下示例假设您在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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多