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(), он будет вести себя так же, как и приложение никогда не загружается.
1 ответ
Ницца! После нескольких часов решительных усилий над этим, только процесс публикации вопроса в Stackru помог мне заметить ответ. Я заметил это краем глаза на нескольких примерах, но никогда не думал, что это действительно имеет значение. Я говорю о "слабом". Ответ прост: ярлык WKInterfaceLabel должен быть слабым. Принимая во внимание, что я объявил вар как это:
@IBOutlet var myLabel: WKInterfaceLabel!
Мне действительно нужно было сделать это (обратите внимание на "слабых"):
@IBOutlet weak var myLabel: WKInterfaceLabel!
Мне довелось увидеть его довольно близко к началу этой страницы документации Apple Swift в качестве примера Swift.
Когда я попробовал, это сработало!