"Неожиданно найдено ноль при развертывании необязательного значения"

Я хотел бы сделать ярлык, который присутствует только при нажатии кнопки. Когда функция hidden() вызывается в MainViewController, она работает хорошо, но когда я вызываю ее из класса ButtonAction (та же функция), я получаю классическую ошибку:

Неожиданно найдено ноль при развертывании необязательного значения

Вот код:

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

}

А ТАКЖЕ:

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

2 ответа

mainScreen экземпляр создан с инициализатором по умолчанию MainViewController() отличается от разработанных в Интерфейсном Разработчике.

Вам нужна фактическая ссылка на контроллер основного вида (через IBOutlet или протокол / делегат и т. д.)

В этой строке кода вы создаете новый экземпляр вашего MainViewController:

var mainScreen = MainViewController()

Вы должны получить ссылку вашего MainViewController() экземпляр (создается автоматически storyboard)

Другие вопросы по тегам