我试图更改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/