试图获取iOS AddressBook联系人图片

时间:2015-01-01 15:39:09

标签: image swift ios8 xcode6 addressbook

我有一段我正在努力的代码。我正在尝试检索联系人的缩略图。我知道这可能不存在,但所以我试图在分配之前检查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?

2 个答案:

答案 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)
}