2016-12-16 59 views
-2

我想要做一个只有当按钮被触摸时才会出现的标签。 当函数隐藏()被称为MainViewController它的工作很好,但,当我从ButtonAction类(功能相同),我得到一个经典的错误称之为:'意外地发现零,同时解开一个可选值'

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-unwrapping-an-optional-valu) – rmaddy

回答

1

使用默认初始化创建的mainScreen实例与Interface Builder中设计的不同。

您需要的实际参考主视图控制器(通过IBOutlet或协议/委托等)

+0

好吧,这并没有什么不同,它还没有通过InterfaceBuilder的东西来设置,比如将值设置为@ @ IBOutlet并添加@ @ IBAction作为目标,以及其他UI的东西,如字体,颜色等。所有这些都可以在代码中完成。 – user28434

+0

我创建了协议,仍然发生“无”问题。我已经用例如print等测试过协议,一切都很好。 – gfd

0

在该行的代码要创建您的MainViewController的新实例:

var mainScreen = MainViewController() 

你必须得到你的MainViewController()实例的参考(由storyboard自动创建)

相关问题