如何从方法快速更新UI

如何从方法快速更新UI

问题描述:

我是swift新手,我正在编写一个需要更改故事板中图像的应用程序。我写了一个功能来更改图像视图中的图像。在函数中有一个if条件,当if条件满足时图像应该被改变,但是如果条件被执行,我得到“意外地发现nil,同时展开可选值”错误。如何从方法快速更新UI

import UIKit 
    import MessageUI 
    import Foundation 
    import CoreLocation 
    class ViewController: UIViewController { 

    @IBOutlet var F_IMG: UIImageView! 
    @IBOutlet var FL_IMG: UIImageView! 
    @IBOutlet var FR_IMG: UIImageView! 


    override func viewDidLoad() { 
    super.viewDidLoad() 

    TimeService.initial(viewcontroller: self) 

    } 

    public func showImages(){ 

     var type: String = Otherclass.gettype() 

     setImageForType(type:type) 


     } 


     public func setImageForType(type:String){ 

     if (type == "NONE"){ 

       DispatchQueue.main.async { 

      self.F_IMG.image = UIImage(named: "r_f") 

     } 

“showImage()函数在另一个类中调用。”

我有被捆绑的形象,但我的UI是没有得到更新,它总是显示错误“意外发现零而展开可选值”

+0

检查一次您的FrontImg属性 –

+0

请告诉我们在哪条确切的行发生崩溃 –

+0

是的,请告诉我们发生崩溃的确切路线。 –

确保FrontImg正确连接到故事板或正确通过代码初始化。

更新:

事实证明,你从其他类调用showImages(),因此它被赋予零误差。

通过从其他课程呼叫ViewController.showImages(),您正在创建一个新的ViewController,而不是引用现有的。这个新的没有F_IMG(imageView)还没有建立它的视图。你引用self.F_IMG.image是零。

我的建议是使用NSNotificationCenter来更新其他View Controller中的UI。

更多的方法,请参阅本SO Answer

+0

感谢好友它工作 –

+0

不客气。 –

我相信这个问题是在这一行造成的:

self.FrontImg.image = UIImage(named: "r_f") 

如果您检查Apple Docs on UIImage class,您使用init?(named name: String)初始化实际上返回可选

那么,你有没有试过

self.FrontImg.image = UIImage(named: "r_f")! 
+0

它仍在崩溃 –

这里的唯一的事情,我已经发现,以确保您的UIElement FrontImg必须正确连接。

+0

它有什么用? –

+0

我已经添加了解释,希望它能帮助你。 – Sandy

+1

我意识到Swift中Optionals的概念,我只是好奇它是如何帮助添加“!”的。在FrontImg之前。如果它需要拆包,它首先不会被遵守。 –