Это правильный способ определить, какой контакт был обновлен из уведомления Notification.Name.CNContactStoreDidChange? - PullRequest
0 голосов
/ 19 июня 2019

В основном у меня есть объект Conversation, который имеет свойство contact: CNContact?, и я хочу обновить контактную информацию при ее обновлении.Сейчас я подписываюсь на уведомление Notification.Name.CNContactStoreDidChange, получаю массив идентификаторов CNNotificationSaveIdentifiersKey из userInfo и сравниваю, равен ли какой-либо из идентификаторов контакта разговора.

Проблема в том, чтони один из идентификаторов не совпадает, они даже имеют другой формат

Идентификатор контакта для разговора: 68269F08-6B22-4B69-BEA1-431805F328D1:ABPerson

Идентификатор контакта для уведомления: 6F959AA0-5EEF-4C38-B9C7-BEA57F270927

Вопросы: Это правильный способ определить, какой контакт был обновлен?

Это код:

//somewhere in the conversation object
NotificationCenter.default.addObserver(forName: Notification.Name.CNContactStoreDidChange, object: nil, queue: .main) { (notification) in            
            guard
                let conversationContact = self.contact,
                let userInfo = notification.userInfo,
                let indentifiers = userInfo["CNNotificationSaveIdentifiersKey"] as? [String],
                let notificationIdentifier = indentifiers.first else {
                return
            }

            print(conversationContact.formattedName ?? "nil name")
            print("conversationContact.identifier \(conversationContact.identifier)")

            print("notificationIdentifier \(notificationIdentifier)")

            if conversationContact.identifier == notificationIdentifier {
                self.contact = nil
            }
        }
    ```
...