【问题标题】:ABRecordCopyValue not working when object doesn't exist当对象不存在时,ABRecordCopyValue 不起作用
【发布时间】:2015-01-16 13:54:29
【问题描述】:

当通讯录中有一个没有姓氏的联系人时,Swift 中的这行代码会给我带来问题。

我尝试了多种方法来解决它,但都无济于事。我可以使用某种 try catch 语句或错误处理吗?或者检查 AnyObject 是否为 null(

的返回类型
ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue()). 

我尝试过使用可选类型,但它似乎不起作用,因为当您选择没有姓氏的联系人时应用程序停止运行 - 并且下面的代码行以错误线程突出显示

1:EXC_BAD_ACCESS

let lName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue() as String

【问题讨论】:

    标签: xcode swift ios8 optional abrecord


    【解决方案1】:

    ABRecordCopyValue 实际上可以返回 nil,因此您应该打开它。此外,转换为 String 对我不起作用,所以我使用的是 NSString。

    if let firstName = ABRecordCopyValue(abContact, kABPersonFirstNameProperty)?.takeRetainedValue() as? NSString {
      println("FIRST NAME: \(firstName)")
    }
    else {
      println("No Name")
    }
    

    您可以尝试的另一件事是,除了单独获取名字和姓氏之外,您还可以尝试获取组合名称。

    if let fullName = ABRecordCopyCompositeName(abContact)?.takeRetainedValue() as String? {
      println("Full Name: \(fullName)")
    }
    

    PS:我也尝试了来自 this question 的所有答案,但尽管在调试应用程序时非常有意义并且可以正常工作,但当我将存档直接部署到手机中时它们崩溃了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多