使用有效的UIImage设置UIImageView.image会在swift中创建“nil”错误

时间:2015-07-02 16:44:31

标签: ios swift null uiimageview uiimage

我正在尝试在UIImageView上设置image属性。当我使用UIImage设置.image属性时,它每次都会抛出此错误:

  

“在展开可选值时意外发现nil”

问题是我的UIImage不是零。

以下是我设置UIImage的代码

func setPhotosForNewsItem(photoArray:[Photo]) {
    println("Image Count: " + String(photoArray.count))
    var image:UIImage = photoArray[0].photo
    println(image.description)
    self.newsImage.image = image
}

这是控制台输出:

  

图像数:2   UIImage:0x7fdd93c5cdd0,{1115,1115}   致命错误:   在解包一个Optional值(lldb)

时意外地发现了nil

我可以在xCode上使用我所谓的无UIImage中的快速查看工具,并查看我尝试使用的照片。当我的UIImage显然不是零时,为什么我会抛出零错误?

UPDATE ::

似乎我没有在我的阵列中正确存储UIImage。这是我下载图像并将它们存储到我的阵列以便稍后解压缩的地方。

var relatedPhotos:[PFObject] = relations as! [PFObject]
                            //println(relations!)
                            var photoArray:[Photo] = [Photo]()

                            for photo in relatedPhotos {
                                var newPhoto = Photo()
                                var photoFile:PFFile = photo.objectForKey("photo") as! PFFile
                                newPhoto.object = photo
                                newPhoto.objectID = photo.objectId!
    photoFile.getDataInBackgroundWithBlock({(imageData: NSData?, error: NSError?) -> Void in
                                        if (error == nil) {

                                            newPhoto.photo = UIImage(data:imageData!)!
                                            //println(newPhoto.photo)
                                            photoArray.append(newPhoto)

                                            if photoArray.count == relatedPhotos.count {

                                                if newObject is FieldReport {
                                                    var report = newObject as! FieldReport
                                                    report.photos = photoArray
                                                    updatedReports.append(report)
                                                    //println("Report Count 1: " + String(updatedReports.count))
                                                }
                                                else {
                                                    var report = newObject as! Feature
                                                    report.photos = photoArray
                                                    updatedReports.append(report)
                                                }

                                                if updatedReports.count == objects.count {


                                                    self.delegate?.fieldReports(updatedReports)
                                                }
                                            }

                                        }
                                    })
}

我知道这可以下载并显示照片,因为我刚刚成功使用它。对我而言,这意味着我没有正确存储UIImage。我应该以不同的方式存储这些图像文件吗?

1 个答案:

答案 0 :(得分:0)

您可以通过安全展开来防止崩溃

func setPhotosForNewsItem(photoArray:[Photo]) {
    println("Image Count: " + String(photoArray.count))
   if  var image:UIImage = photoArray[0].photo
   {
       println(image.description)
       self.newsImage.image = image
    }
}

设置断点并检查出错了

编辑:

我能做的唯一目的 - 检查这里发生的事情:

newPhoto.photo = UIImage(data:imageData!)!

似乎是所有问题的主要原因。检查imageData的类型,尝试将其转换为图像,例如UIImage(CGImage: <#CGImage!#>)。你需要弄清楚如何处理这个图像。