Reputation: 1736
I am trying to retrieve contact names, here's how:
func getContactNames() {
let adbk : ABAddressBook? = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
let people = ABAddressBookCopyArrayOfAllPeople(adbk).takeRetainedValue() as [ABRecord]
for person in people {
contactList.append(ABRecordCopyCompositeName(person).takeRetainedValue() as String)
}
}
When all contacts do have names it works, although when there are some contacts without names, app crashes and I get:
fatal error: unexpectedly found nil while unwrapping an Optional value
I tried using ?
like this:
let contact2 = (ABRecordCopyCompositeName(person)?.takeRetainedValue() as? String)
if contact2 != nil {
contactList.append(contact2!)
}
Then I would always get nil
.
Any ideas what I am doing wrong?
Upvotes: 2
Views: 253
Reputation: 56
In my experience you have to do it step-by-step: first check if ABRecordCopyCompositeName
is not nil
and then take it and convert to string.
if let tmpName = ABRecordCopyCompositeName(person) {
let contact2 = tmpName.takeRetainedValue() as String
contactList.append(contact2)
}
Upvotes: 1