【问题标题】:Swift WKInterfaceLabel IBOutlet Freezes Watchkit App at StartupSwift WKInterfaceLabel IBOutlet 在启动时冻结 Watchkit 应用程序
【发布时间】:2015-06-05 23:40:05
【问题描述】:

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

@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() 方法中,它的行为方式与应用程序从不加载的方式相同。

【问题讨论】:

    标签: ios swift apple-watch wkinterfacelabel


    【解决方案1】:

    不错!经过几个小时的坚定努力,仅在 StackOverflow 上发布问题的过程就帮助我注意到了答案。在几个例子中,我从眼角注意到了它,但从没想过它真的很重要。我说的是“弱”。答案很简单,WKInterfaceLabel 标签必须很弱。而我一直在这样声明 var:

    @IBOutlet var myLabel: WKInterfaceLabel!
    

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

    @IBOutlet weak var myLabel: WKInterfaceLabel!
    

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

    当我尝试它时,它起作用了!

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2023-03-07
      • 1970-01-01
      • 2014-01-01
      相关资源
      最近更新 更多