2016-12-01 55 views
1

我是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

是的,請告訴我們發生崩潰的確切路線。 –

回答

2

確保FrontImg正確連接到故事板或正確通過代碼初始化。

更新:

事實證明,你從其他類調用showImages(),因此它被賦予零誤差。

通過從其他課程呼叫ViewController.showImages(),您正在創建一個新的ViewController,而不是引用現有的。這個新的沒有F_IMG(imageView)還沒有建立它的視圖。你引用self.F_IMG.image是零。

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

更多的方法,請參閱本SO Answer

+0

感謝好友它工作 –

+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

它仍在崩潰 –

0

這裏的唯一的事情,我已經發現,以確保您的UIElement FrontImg必須正確連接。

+0

它有什麼用? –

+0

我已經添加了解釋,希望它能幫助你。 – Sandy

+1

我意識到Swift中Optionals的概念,我只是好奇它是如何幫助添加「!」的。在FrontImg之前。如果它需要拆包,它首先不會被遵守。 –