【发布时间】:2014-11-18 01:05:51
【问题描述】:
我对 iOS 开发和 swift 比较陌生。但到目前为止,我总是能够通过对 stackoverflow 的一些研究以及一些文档和教程来帮助自己。 但是,有一个问题我还没有找到任何解决方案。
我想从用户通讯录中获取一些数据(例如单值属性kABPersonFirstNameProperty)。因为如果此联系人在地址簿中没有 firstName 值,.takeRetainedValue() 函数会引发错误,所以我需要确保 ABRecordCopyValue() 函数确实返回一个值。我试图在闭包中检查这一点:
let contactFirstName: String = {
if (ABRecordCopyValue(self.contactReference, kABPersonFirstNameProperty) != nil) {
return ABRecordCopyValue(self.contactReference, kABPersonFirstNameProperty).takeRetainedValue() as String
} else {
return ""
}
}()
contactReference 是ABRecordRef! 类型的变量
当地址簿联系人提供 firstName 值时,一切正常。但是如果没有 firstName,应用程序会因.takeRetainedValue() 函数而崩溃。似乎 if 语句没有帮助,因为 ABRecordCopyValue() 函数的非托管返回值不是 nil,尽管没有 firstName。
我希望我能把我的问题说清楚。如果有人能用一些脑电波帮助我,那就太好了。
【问题讨论】:
标签: ios swift unmanaged abaddressbook abrecordcopyvalue