Мне удалось получить внешние контакты на устройстве, используя 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)
Это все равно вызовет сбой.