Swift WKInterfaceLabel IBOutlet在启动时冻结Watchkit应用程序

时间:2015-06-05 23:40:06

标签: ios swift apple-watch wkinterfacelabel

我正在尝试制作一个手表应用的简单示例:标签和按钮。按下按钮,标签文字应该改变。

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

当我在模拟器中运行应用程序时,以下代码会产生无穷无尽的旋转轮,如屏幕截图所示:

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

enter image description here

请记住。该应用程序永远不会加载。我永远不会看到按钮或标签。它只是停留在这个旋转的白色圆点上。

但是,如果我采用完全相同的代码并简单地注释掉标签,则手表应用程序会加载并运行正常。

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

结果:

enter image description here

如果我点击按钮,它会按预期更改为“hermes”:

enter image description here

为什么会发生这种情况?我一直坐在这里四个小时试图解决这个问题。标签作为IBOutlet连接。我已经清理了这个项目。我关闭了XCode,重启了我的整台电脑。我从头开始做了第二个项目。全都一样。为什么我不能简单地将此标签取消注释?如果在按钮的操作中取消注释标签,为什么应用程序永远不会加载?额外信息:即使我将未注释的标签放在别处,例如在willActivate()方法中,它的行为方式与应用程序永不加载的行为相同。

1 个答案:

答案 0 :(得分:0)

尼斯!经过几个小时的努力,只需在StackOverflow上发布问题的过程帮助我注意到答案。在几个例子中我注意到了它的角落,但从未想过它确实很重要。我说的是“弱”。答案很简单,WKInterfaceLabel标签必须很弱。虽然我一直在声明这样的var:

@IBOutlet var myLabel: WKInterfaceLabel!

我实际上需要这样做(注意'弱'):

@IBOutlet weak var myLabel: WKInterfaceLabel!

我碰巧看到它非常接近this Apple Swift documentation page的顶部作为Swift示例。

当我尝试它时,它有效!