当对象不存在时,ABRecordCopyValue不起作用

时间:2014-11-19 06:14:35

标签: xcode swift ios8 optional abrecord

当地址簿中没有姓氏的联系人时,Swift中的这行代码会导致我出现问题。

我试图以多种方式解决它无济于事。我可以使用某种try catch语句或错误处理吗?或者检查AnyObject是否为null(返回类型为

ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue()). 

我尝试过使用可选类型,但由于应用程序在您选择没有姓氏的联系人时停止运行,但它似乎无法正常工作 - 下面的代码行突出显示错误线程

  

1:EXC_BAD_ACCESS

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

1 个答案:

答案 0 :(得分:3)

ABRecordCopyValue 实际上可以返回nil,因此你应该打开它。另外,转换为String并不适合我,所以我使用的是NSString。

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

你可以尝试的另一件事是不是单独获取firstName和lastName,你也可以尝试获取组合名称。

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

PS:我还尝试了this question的所有答案,但是尽管在调试应用程序时有了完美的意义和工作,但是当我将存档直接部署到手机中时,它们就崩溃了。 / em>的