【问题标题】:Setting UIImageView.image with valid UIImage creates "nil" error in swift使用有效的 UIImage 设置 UIImageView.image 会在 swift 中创建“nil”错误
【发布时间】:2015-07-02 16:44:31
【问题描述】:

我正在尝试在 UIImageView 上设置图像属性。当我使用 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} 致命错误: 在展开可选值 (lldb) 时意外发现 nil

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

更新::

似乎我没有正确地将 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。我应该以不同的方式存储这些图像文件吗?

【问题讨论】:

  • 更新:通过将 self.newsImage.image = image 更改为 self.newsImage?.image = image 我已经能够消除错误,但它仍然没有设置我的图像。
  • 你的班级如何声明“照片”属性?您是否也尝试过 self.newsImage.image = image! ?还有 - 见stackoverflow.com/a/26675638/2382237
  • var photo : UIImage?

标签: ios swift null uiimageview uiimage


【解决方案1】:

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

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!#>) 将其转换为图像。你需要弄清楚如何处理这个图像。

【讨论】:

  • 谢谢多罗,会的。我仍在迅速弄清楚这种包装和展开。它开始变得有意义了。知道为什么我的 UIImage 显示为零,即使它不是零?
  • 似乎没有正确存储在数组中。尝试记录 .photo 道具并手动初始化 self.newsImage.image = UIImage(named: "logged_photo_name")
  • 当我打印 .photo 属性时,我得到了 - UIImage: 0x7fdd93c5cdd0, {1115, 1115} - 不是照片名称。我的理解是 UIImage 设置后不会存储名称。有什么方法可以打印出照片名称吗?
  • 你可以做下一个技巧 - 将照片保存到磁盘,然后使用 uiimage 构造函数iostechsolutions.blogspot.com/2014/11/…再次选择它
  • 刚刚更新了我的问题。似乎你是对的,我没有正确地将 UIImage 存储在我的数组中,但我不确定为什么会这样。介意看看更新的代码吗?
猜你喜欢
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多