2016-12-16 5 views
-2

버튼을 만졌을 때만 나타나는 레이블을 만들고 싶습니다. 기능 숨겨진 때() 내가 ButtonAction 클래스 (동일한 기능) 내가 고전적인 오류 얻을에서 호출있을 때 그것은 잘 작동하지만 것 MainViewController에서 호출됩니다'선택 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다'

// 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 
    } 

} 
: 여기

Unexpectedly found nil while unwrapping an Optional value

를 코드입니다

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

[치명적인 오류 : 선택 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다 "는 의미는 무엇입니까?] (http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil- while-labelling-an-optional-valu) – rmaddy

답변

1

기본 초기화로 만든 mainScreen 예은 Interface Builder에서 설계된 것과 다릅니다.

var mainScreen = MainViewController() 

:

당신은 코드 당신이 당신의 MainViewController의 새로운 인스턴스를 생성하는 그 라인에서

+0

글쎄, 그것도 다르지 않다.'InterfaceBuilder'를 사용하여 값을 설정하고 @ IBOutlet을 설정하고'@ IBAction'을 대상으로 추가하는 것과 같이 아직 설정되지 않았다. , 글꼴, 색상 등의 UI 요소를 모두 포함 할 수 있습니다.이 모든 것은 코드에서도 가능합니다. – user28434

+0

나는 프로토콜을 만들고 "nil"문제가 여전히 발생합니다. 나는 print 같은 예제를 가지고 프로토콜을 테스트했고, 모든 것이 괜찮았다. – gfd

0

을 (/ 등 위임 IBOutlet 또는 프로토콜을 통해) 주 뷰 컨트롤러에 대한 실제 참조가 필요 MainViewController() 인스턴스의 참조 (storyboard에 의해 자동 생성됨)

관련 문제