Сохранение адреса контакта в Unified Contact приводит к (ошибка CNErrorDomain 500)

В моем приложении есть нечетная ошибка, для которой я не могу найти никаких обходных путей/исправлений. По какой-то причине я могу сохранить адрес контакта, который не объединен с социальным профилем (Facebook, Twitter и т. д.). Однако, когда я пытаюсь добавить адрес для моего контакта, объединенный с Facebook или Twitter, я получаю странную ошибку сохранения:

The operation couldn’t be completed. (CNErrorDomain error 500.)

Вот часть кода, который я использую:

    if mutableContact.isKeyAvailable(CNContactPostalAddressesKey) {
        var postalAddresses = [CNLabeledValue<CNPostalAddress>]()

        for address in self.contactAddresses {
            let postalAddress: CNLabeledValue<CNPostalAddress> = CNLabeledValue(label: CNLabelOther, value: address)
            postalAddresses.append(postalAddress)
        }

        mutableContact.postalAddresses = postalAddresses
    }

    let saveRequest = CNSaveRequest()

    if isNewContact {
        saveRequest.add(mutableContact, toContainerWithIdentifier: nil)
    } else {
        saveRequest.update(mutableContact)
    }

    do {
        try contactStore.execute(saveRequest)
    } catch let error as NSError {
        print(error.localizedDescription)
        let alertController = UIAlertController(title: "Failed to save/update contact!", message: "Unfortunatly, the app couldn't add or make modifications to your contact. Please try again or use the Contacts app to preform changes.", preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "Okay", style: .cancel) {
            action in
            self.dismiss(animated: true, completion: nil)
        }
        alertController.addAction(cancelAction)
        self.present(alertController, animated: true, completion: nil)
    }

person Harish    schedule 12.11.2016    source источник
comment
вы решили эту проблему?   -  person Rendel    schedule 19.03.2017
comment
@Rendel еще не получил ответа от Apple ????   -  person Harish    schedule 19.03.2017


Ответы (2)


Итак, я получил ответ от Apple, и это поведение предусмотрено. Разработчики должны обнаружить это нарушение политики, а затем предложить создать новый контакт, а затем связать два контакта.

person Harish    schedule 05.04.2017
comment
Гах. Какое ужасное решение. :) - person Duncan Babbage; 31.08.2017
comment
@DuncanBabbage Я знаю, что это больше похоже на ошибку, ха-ха - person Harish; 31.08.2017

Я понимаю, почему Apple это делает, так как социальная учетная запись не хранит все те же данные, что, скажем, контакт iCloud, поэтому вам нужно хранить эти значения где-то еще (и вы не можете преобразовать контакт в iCloud как социальный контакт). учетная запись потеряет свои данные.)

Я не думаю, что вы можете ВЫБРАТЬ связать контакты программно, не так ли?

Насколько я понимаю, iOS решит, являются ли два контакта одинаковыми - возможно, когда совпадает более одного значения (?). Вы можете определить, связаны ли два заданных контакта вместе.

person Peter Johnson    schedule 12.12.2018