【问题标题】:Swift Crash Extracting Record value from Address Book从通讯簿中提取记录值的 Swift Crash
【发布时间】: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


【解决方案1】:

所以我决定尝试在 Swift 1.2 (Xcode 6.3) 下构建它并且它可以工作(在花了大约一个小时转换项目之后)。所以这绝对是一个编译器错误,在最新的 Swift 中已经修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多