我有一段我正在努力的代码。我正在尝试检索联系人的缩略图。我知道这可能不存在,但所以我试图在分配之前检查nil。不知怎的,Xcode仍试图上传nil,我的程序不断崩溃:
致命错误:在解包可选值时意外发现nil
这是我的代码段:
if UIImage(data: ABPersonCopyImageDataWithFormat(allpeople[i], kABPersonImageFormatThumbnail).takeRetainedValue() as NSData) != nil {
pic = UIImage(data: ABPersonCopyImageDataWithFormat(allpeople[i], kABPersonImageFormatThumbnail).takeRetainedValue() as NSData)!
}
所有人被定义为:
var allpeople: [ABRecordRef] = ABAddressBookCopyArrayOfAllPeople(addressBook)?.takeRetainedValue() as [ABRecordRef]
我没有得到它,是否有其他方法可以在没有程序崩溃的情况下检查nil?
答案 0 :(得分:1)
刚想出来了。这是我为解决问题所做的工作。好像第一行是我搞砸的地方,ABPersonCopyImageDataWithFormat本身在未设置配置文件图像的情况下在所有其他内容之前返回nil。所以它帮助我把我的界限分成了更小的块,如下所示:
var pic: UIImage = UIImage(named: "default-pic.png")!
var picTemp1 = ABPersonCopyImageDataWithFormat(allpeople[i], kABPersonImageFormatThumbnail)?
if picTemp1 == nil{
println("NIL FOUND")
}
else{
println("PICTURE FOUND")
var picTemp2: NSObject? = Unmanaged<NSObject>.fromOpaque(picTemp1!.toOpaque()).takeRetainedValue()
if picTemp2 != nil {
pic = UIImage(data: picTemp2! as NSData)!
}
}
答案 1 :(得分:0)
let thumbnailData = ABPersonCopyImageDataWithFormat(allpeople[i], kABPersonImageFormatThumbnail).takeRetainedValue()
if thumbnailData != nil {
pic = UIImage(data: thumbnailData)
}