致命错误:意外发现零

时间:2015-11-26 04:40:06

标签: swift

func generateMemedImage() -> UIImage {

    let memeImage = imageView.image!
    let newImageViewOriginAndDimension = self.view.frame
    let originalImageViewOriginAndDimension = imageView.frame
    rescaleImageView(newImageViewOriginAndDimension, image: memeImage)
    print(imageView.frame) // has fatal error unexpectedly found nil
    // other unrelated lines of code
}
func rescaleImageView(originAndDimension: CGRect, image : UIImage) {
    let newImageView : UIImageView = UIImageView(frame: originAndDimension)
    newImageView.image = image
    imageView = newImageView
    print(imageView.frame) // prints fine
}

所以我上面有两个函数可以有人向我解释为什么我能够在函数print(imageView.frame)中运行执行rescaleImageView而不会在generateMemedImage函数中运行而不是错误?

我是否正确地假设当我在newImageView函数中创建generateMemedImage时,我实际上并没有将我的班级中的imageView变量分配给newImageView,而是只是在我的函数中本地重新指定指针?

1 个答案:

答案 0 :(得分:1)

您正在将新创建的newImageView分配到weak媒体资源中。这就是为什么它在第一个方法范围内没有活着。它被简单地解除了分配。它适用于第二种方法,因为该对象由newImageView常量保留。您没有将新视图添加到超级视图,因此不会保留它(也不会删除旧视图)。但是,在您的情况下创建新的UIImageView并不合理。您所要做的就是将图像分配给现有视图。如下:

func rescaleImageView(originAndDimension: CGRect, image : UIImage) {
    imageView.image = image
    imageView.frame = originAndDimension
}
相关问题