【发布时间】:2015-02-11 22:53:58
【问题描述】:
我正在使用 Swift 从地址簿中提取数据。如果我使用 Debug 构建应用程序,一切正常。但是如果我使用发布配置构建应用程序,它会在这个函数中崩溃:
private func extractProperty<T>(record:ABRecord, propertyName : ABPropertyID) -> T? {
return ABRecordCopyValue(record, propertyName)?.takeRetainedValue() as? T
}
经过一些测试,我发现当我尝试检索联系人没有的“中间名”时它崩溃了。我将链条拆开以弄清楚它到底在哪里崩溃,结果它在takeRetainedValue() 中崩溃了。所以即使ABRecordCopyValue 没有返回值,Swift 仍然认为它是并且沿着可选链传递它。我尝试了各种测试nil 的方法,但似乎没有任何效果。
不过,这只发生在发布版本中。不是调试版本。
关于如何解决这个问题的任何想法?
【问题讨论】:
-
对于那些想知道如何调用上面的函数的人(比如一个月后的我),使用这样的东西:
var firstname = extractProperty(person, propertyName: kABPersonFirstNameProperty) as String?
标签: swift abaddressbook