我试图更改UIImageView中显示的图像,但是当调用函数“loadMyImage”时(这是我将更改图像的函数),ViewController中的所有内容都将变为零。
Picture
这是我调用loadMyImage函数之前的代码。

let playbackPoint = defaults.float(forKey: "pbpoint")
if eachTime > Double(playbackPoint) {
   let name = imageList[timeList.index(of: eachTime)!]
   ViewController().loadMyImage(name: name)
}

我在这条线上画了个断点
let name = imageList[timeList.index(of: eachTime)!]

一切都还在
Picture
下面是loadMyImage的代码
func loadMyImage(name: String) {
        let fileURL = documentsUrl.appendingPathComponent(name)
        do {
            let imageData = try Data(contentsOf: fileURL)
            let myImage = UIImage(data: imageData)
            print(self.myImgView)
            self.myImgView.image = myImage
        } catch {
            print("Error loading image : \(error)")
        }
    }

一旦第一条线运行。所有与UI相关的东西都变成了零。我还试着打印出来,结果打印出来“没有”。
我已经试过清理这个项目,但还是不行。

最佳答案

在视图控制器中,没有什么会变成nil,因为您没有使用视图控制器,而是使用视图控制器类的一个全新实例。在这里

ViewController().loadMyImage(name: name)

创建一个新实例并对其调用loadMyImage。您正在创建的新实例与当前显示的视图控制器无关,不在导航堆栈上,并且仅存在于if {}的范围内,并且将立即被释放。
我假设这个密码
let playbackPoint = defaults.float(forKey: "pbpoint")
if eachTime > Double(playbackPoint) {
   let name = imageList[timeList.index(of: eachTime)!]
   ViewController().loadMyImage(name: name)
}

驻留在视图控制器中?如果是,请执行以下操作:
let playbackPoint = defaults.float(forKey: "pbpoint")
if eachTime > Double(playbackPoint) {
   let name = imageList[timeList.index(of: eachTime)!]
   self.loadMyImage(name: name)
}

否则(视图控制器中不调用此函数),需要将视图控制器实例传递给此函数。

关于ios - UIView中的所有内容随机变为零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51669250/

10-13 04:00