xcode - 对象不存在时 ABRecordCopyValue 不起作用

标签 xcode swift ios8 option-type abrecord

本地址簿中有没有姓氏的联系人时,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/

相关文章:

ios8 - ALAssetsGroupSavedPhotos 最近的,不是全部,iOS8下的视频

swift - 如何在新 Controller 的tableView中打开数据,来自FIrebase的数据

ios - (Swift) 在 View Controller 之间传输数据

ios - 安装 RestKit 后使用未声明的标识符 'RKClient'

ios - 使用 xcodeproj 在 Images.xcassets 中创建对图像的文件引用

ios - 将图像复制并粘贴到模拟器中的教科书中

ios - 在 iOS 7 手机上使用 iOS 8 功能,hidesBarsOnSwipe

ios - 多个框架和公共(public)库

ios - 无法监视事件循环并等待应用程序空闲

iphone - 如何拍摄静止图像?