Установить UILabel из функции: неожиданно найден ноль при развертывании необязательного значения - PullRequest
0 голосов
/ 25 августа 2018

У меня есть этот код в моем didFinishLaunchingWithOptions() в AppDelegate.swift:

ViewController().changeLabel()

В моем ViewController.swift У меня есть этот код:

    @IBOutlet var myLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
//        myLabel.text = "Hello, I'm in viewDidLoad."
    }
    func changeLabel() {
        print("I'm the test.")
        myLabel.text = "Hello, I'm in printSomething."
    }

myLabel.text = "Hello, I'm in viewDidLoad." in viewDidLoad() работает. print("I'm the test.") in changeLabel() также работает.

Но для myLabel.text = "Hello, I'm in printSomething." в changeLabel() я всегда получаю следующую ошибку:

Тема 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании Необязательное значение

Почему это работает в viewDidLoad(), но не в моей функции?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Это

ViewController()

означает новый VC, созданный на лету, так как вы должны загрузить его как

let vc = storyboard.instantiate ///////

, поскольку он находится внутри раскадровки, приведенный выше код действителен только в том случае, если виртуальный канал создан программно, поэтому вы должны вносить какие-либо изменения, скажем, viewDidLoad, но при необходимости вы можете использовать этот код внутри диспетчеризации после

DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
   let vc = self.window!.rootViewController as! ViewController
   vc.changeLabel()
}
0 голосов
/ 25 августа 2018

Поскольку ваш UILabel определен в файле пера Storyboard, он не будет загружен и подключится к View Controller, если вы вызовете ViewController().changeLabel()

let storyboard = UIStoryboard(name: "Main", bundle: nil) //"Main" your storyboard name
let vc = storyboard.instantiateViewController(withIdentifier: "viewIdentifier") //Replace viewIdentifier with your view controller's identifier
vc.changeLabel()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...