我正在尝试检索联系人姓名,方法如下:
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
。
任何想法我做错了什么?
答案 0 :(得分:1)
根据我的经验,您必须一步一步地执行此操作:首先检查ABRecordCopyCompositeName
是否不是nil
,然后将其转换为字符串。
if let tmpName = ABRecordCopyCompositeName(person) {
let contact2 = tmpName.takeRetainedValue() as String
contactList.append(contact2)
}