Xernox
Xernox

Reputation: 1736

Contact without name causes app to crash on iPhone

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

Answers (1)

Chiara Bizzotto
Chiara Bizzotto

Reputation: 56

In my experience you have to do it step-by-step: first check if ABRecordCopyCompositeNameis 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

Related Questions