Swift WKInterfaceLabel IBOutlet зависает в приложении Watchkit при запуске

Я пытаюсь сделать простой пример приложения для часов: метка и кнопка. Нажмите кнопку, и текст метки должен измениться.

@IBOutlet var myLabel: WKInterfaceLabel!
@IBOutlet var myButton: WKInterfaceButton!

Следующий код приводит к бесконечному вращению колеса, когда я запускаю приложение в симуляторе, как показано на снимке экрана:

@IBAction func sampleFunc() {
        myLabel.setText("hello world")
        myButton.setTitle("hermes")
}

введите здесь описание изображения

Иметь ввиду. Приложение никогда не загружается. Я никогда не вижу кнопку или ярлык. Он просто застревает на этом вращающемся белом колесе из точек.

Но если я возьму точно такой же код и просто закомментирую метку, приложение для часов загрузится и будет работать нормально.

@IBAction func sampleFunc() {
        //myLabel.setText("hello world")
        myButton.setTitle("hermes")
}

Результат:

введите здесь описание изображения

И если я нажму кнопку, она изменится на «Гермес», как и предполагалось:

введите здесь описание изображения

С какой стати это произошло? Я сижу здесь уже четыре часа, пытаясь понять это. Метка подключена как IBOutlet. Я почистил проект. Я закрыл XCode, перезагрузил весь компьютер. Я сделал второй проект с нуля. Все так же. Почему я не могу просто оставить этот ярлык без комментариев? Почему приложение никогда не загружается, если метка раскомментирована в действии кнопки? Дополнительная информация: даже если я размещу незакомментированную метку в другом месте, например, в методе willActivate(), она будет вести себя так же, как и приложение, которое никогда не загружается.


person Jack Amoratis    schedule 05.06.2015    source источник


Ответы (1)


Ницца! После нескольких часов решительных усилий по этому вопросу, сам процесс размещения вопроса на StackOverflow помог мне заметить ответ. Я заметил это краем глаза в паре примеров, но никогда не думал, что это действительно имеет значение. Я говорю о «слабом». Ответ прост: метка WKInterfaceLabel должна быть слабой. В то время как я объявлял var следующим образом:

@IBOutlet var myLabel: WKInterfaceLabel!

Мне действительно нужно было это делать (обратите внимание на «слабый»):

@IBOutlet weak var myLabel: WKInterfaceLabel!

Я случайно увидел его довольно близко к верхней части этого Apple Swift. страница документации в качестве примера Swift.

Когда я попробовал это, это сработало!

person Jack Amoratis    schedule 06.06.2015