Как правильно использовать AddressBook Framework с Swift? - PullRequest
0 голосов
/ 21 октября 2019

Мне удалось получить внешние контакты на устройстве, используя Contacts framework, используемый также с iOS´ 9.0. Everything works perfect. The app I'm working with, however, have users that use iOS below 9.0, so I have to implement the addressBook`.

Я следовал этому руководству, чтобы настроить основы: Как получить контакты адресной книги с помощью Swift?

Но когда compiler пытается заполнить мой array с внешними контактами приложение вылетает, говоря, что оно "найдено ноль при развертывании необязательного значения". Вот код:

let status = ABAddressBookGetAuthorizationStatus()
    if status == .denied || status == .restricted {
        return
    }

    var error: Unmanaged<CFError>?
    guard let addressBook: ABAddressBook = ABAddressBookCreateWithOptions(nil, &error)?.takeRetainedValue() else {
        print(error?.takeRetainedValue() as Any)
        return
    }

    ABAddressBookRequestAccessWithCompletion(addressBook) { (granted, error) in
        if !granted {
            return
        }

        if let people = ABAddressBookCopyArrayOfAllPeople(addressBook)?.takeRetainedValue() {
           let tempObject = ExternalAppContactsBook()
            //IT CRASCHES ON THE LINE BELOW
            tempObject.firstName = addressBook.givenName
            tempObject.lastName = addressBook.familyName
            tempObject.company = addressBook.organizationName
            tempObject.phoneNumber = addressBook.phoneNumbers
        }
}

Как я уже сказал, с фреймворком Contacts он прекрасно работает для заполнения объекта, но не здесь. Я пропустил что-то важное?

РЕДАКТИРОВАТЬ Я попытался:

let people = ABAddressBookCopyArrayOfAllPeople(myAddressBook).takeRetainedValue() as NSArray as [ABRecord]
for person in people {
   print("?", ABRecordCopyCompositeName(person).takeRetainedValue()) }

И это напечатало имя и фамилию контактов. Но я не могу получить доступ к определенным свойствам, таким как: ABRecordCopyCompositeName(person.familyName)

Это все равно вызовет сбой.

...