没有名字的联系导致应用程序在iPhone上崩溃

时间:2015-11-26 13:05:46

标签: swift addressbook abaddressbook

我正在尝试检索联系人姓名,方法如下:

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)
    }
}

当所有联系人确实有名字时它会起作用,虽然有些联系人没有名字,但应用程序崩溃了,我得到了:

  

致命错误:在解包可选值时意外发现nil

我尝试使用?这样:

let contact2 = (ABRecordCopyCompositeName(person)?.takeRetainedValue() as? String)
 if contact2 != nil {
   contactList.append(contact2!)
 }

然后我总是得到nil

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

根据我的经验,您必须一步一步地执行此操作:首先检查ABRecordCopyCompositeName是否不是nil,然后将其转换为字符串。

if let tmpName = ABRecordCopyCompositeName(person) {
   let contact2 = tmpName.takeRetainedValue() as String
   contactList.append(contact2)
}