我正在尝试制作一个手表应用的简单示例:标签和按钮。按下按钮,标签文字应该改变。
@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")
}
结果:
如果我点击按钮,它会按预期更改为“hermes”:
为什么会发生这种情况?我一直坐在这里四个小时试图解决这个问题。标签作为IBOutlet连接。我已经清理了这个项目。我关闭了XCode,重启了我的整台电脑。我从头开始做了第二个项目。全都一样。为什么我不能简单地将此标签取消注释?如果在按钮的操作中取消注释标签,为什么应用程序永远不会加载?额外信息:即使我将未注释的标签放在别处,例如在willActivate()方法中,它的行为方式与应用程序永不加载的行为相同。
答案 0 :(得分:0)
尼斯!经过几个小时的努力,只需在StackOverflow上发布问题的过程帮助我注意到答案。在几个例子中我注意到了它的角落,但从未想过它确实很重要。我说的是“弱”。答案很简单,WKInterfaceLabel标签必须很弱。虽然我一直在声明这样的var:
@IBOutlet var myLabel: WKInterfaceLabel!
我实际上需要这样做(注意'弱'):
@IBOutlet weak var myLabel: WKInterfaceLabel!
我碰巧看到它非常接近this Apple Swift documentation page的顶部作为Swift示例。
当我尝试它时,它有效!