2016-12-16 6 views
-2

ボタンを押したときにだけ表示されるラベルを作成したいと思います。機能が隠されて()はそれがうまく働いていますが、私はButtonActionクラス(同じ機能)からそれを呼んでいるときMainViewControllerで呼び出され 私は古典的なエラーが発生します。'オプション値のアンラッピング中に予期せずnilが見つかりました'

Unexpectedly found nil while unwrapping an Optional value

は、ここでは、コードです:

// MainViewController.swift 

import UIKit 

class MainViewController: UIViewController { 

    @IBOutlet weak var labelToShow: UILabel! 
    @IBOutlet weak var button: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     labelToShow.isHidden = true 
    } 

    func hidden() { 
     labelToShow.isHidden = true 
    } 

    func inHidden() { 
     labelToShow.isHidden = false 
    } 

} 

AND:デフォルトの初期化子で作成

// ButtonAction.swift 


import UIKit 

class ButtonAction: UIButton { 

    var touched:Bool = false 
    var mainScreen = MainViewController() 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     sleep(1) 
     mainScreen.hidden() 
     touched = true 
    } 

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
     mainScreen.inHidden() 
     touched = false 
    } 
} 
+0

ButtonActionクラスとViewControllerの作成方法をフルコードで表示できますか? –

+0

[致命的なエラー:オプション値をアンラッピングしている間に予期せぬエラーが発生しました "とはどういう意味ですか?](http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil- while-wrapping-an-optional-value) – rmaddy

答えて

1

mainScreenインスタンスはInterface Builderで設計されたものとは異なります。

あなたはあなたのMainViewControllerの新しいインスタンスを作成するコード行で、メインビューコントローラへの実際の参照(IBOutletを介して、またはプロトコル/などを委譲)

+0

これは違いはありません。値を '@BOutlet'sに設定し、' @IBAction'sをターゲットとして追加するなど、 'InterfaceBuilder'のものではまだセットアップされていません、フォント、色などのUIのものが含まれています。そのすべてはコードでも実行できます。 – user28434

+0

私はプロトコルを作成しましたが、 "nil"という問題はまだ発生しています。私はprintなどのサンプルを使ってプロトコルをテストしました。 – gfd

0

が必要になります。

var mainScreen = MainViewController() 

MainViewController()インスタンスのリファレンスを取得する必要があります(storyboardによって自動的に作成されます)

関連する問題