本地址簿中有没有姓氏的联系人时,Swift 中的这行代码会给我带来问题。
我试过很多方法都无济于事。我可以使用某种 try catch 语句或错误处理吗?或者检查 AnyObject 是否为 null(
的返回类型ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue()).
我试过使用可选类型,但它似乎不起作用,因为当您选择一个没有姓氏的联系人时应用程序停止运行 - 下面的代码行突出显示错误 Thread
1: EXC_BAD_ACCESS
let lName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue() as String
最佳答案
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)")
}
P.S:我也尝试了 this question 中的所有答案但是尽管在调试应用程序时非常有意义并且可以正常工作,但当我将存档直接部署到手机中时它们崩溃了。
关于xcode - 对象不存在时 ABRecordCopyValue 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27010208/