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