Быстрое получение номеров телефонов контактов пользователей - PullRequest
0 голосов
/ 08 мая 2020

В настоящее время я работаю над проектом SwiftUI и пытаюсь получить номера телефонов контактов пользователя.

Я успешно собрал контакты и могу распечатать их givenName, а также familyName, но у меня возникли проблемы при попытке работать с контактами phoneNumbers.

Вот ядро ​​рабочего кода, используемого для печати givenName:

store.enumerateContacts(with: request, usingBlock: {
    (contact, stopPointer) in print(contact.givenName)
})

Использование { ссылка } в качестве примера для работы, вот как я пытаюсь распечатать контакты phoneNumbers:

store.enumerateContacts(with: request, usingBlock: {
    (contact, stopPointer) in contact.
        for phone in contact.phoneNumbers {
            var label = phone.label
            if label != nil {
                label = CNLabeledValue<CNPhoneNumber>.localizedString(forLabel: label!)
            }
            print("  ", label, phone.value.stringValue)
        }
    })

Попытка перебрать contact.phoneNumbers достаточно, чтобы вызвать следующую ошибку с очень длинной трассировкой стека:

подключение к службе на pid 88497 с именем com.apple.contactsd: исключение обнаружено во время вызова блока ответа на сообщение 'encodedContactsAndCursorForFetchRequest: withReply: '.

Игнорируемое исключение: свойство не запрашивалось при получении контакта.

1 Ответ

0 голосов
/ 13 мая 2020

Проблема была в моем CNContactFetchRequest.

Изначально я запрашивал только имена контактов. Это выглядело так:

let keys = [CNContactGivenNameKey]
let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])

Ответ был следующим: добавить дополнительные ключи, которые мне нужно было использовать в моем запросе, например:

let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
...