WKInterfaceSwitch switchAction(value: Bool) 值始终为 false Apple Watch

WKInterfaceSwitch switchAction(value: Bool) value is always false Apple Watch

我目前正在开发 Apple Watch 应用程序。 我使用 WKInterfaceSwitch 来切换某物的状态。

在我的 WKIntefaceController 中,我连接了切换开关时调用的操作。

@IBAction func switchAction(value: Bool) {
    NSLog("\(value)")
}

当我运行模拟器中的项目时,控制台输出显然是:

2015-05-28 20:42:08.067 Watch Test WatchKit Extension[1503:28272] false
2015-05-28 20:42:08.896 Watch Test WatchKit Extension[1503:28272] true
2015-05-28 20:42:10.547 Watch Test WatchKit Extension[1503:28272] false
2015-05-28 20:42:11.558 Watch Test WatchKit Extension[1503:28272] true

当我运行实体手表上的项目时,控制台会显示:

2015-05-28 20:44:06.044 Watch Test WatchKit Extension[345:16118] false
2015-05-28 20:44:06.954 Watch Test WatchKit Extension[345:16118] false
2015-05-28 20:44:07.318 Watch Test WatchKit Extension[345:16118] false
2015-05-28 20:44:08.343 Watch Test WatchKit Extension[345:16118] false

有谁知道为什么会这样。

可在此处下载显示该问题的完整项目:

https://bitbucket.org/rcpfuchs/watch-kit-wkinterfaceswitch-issue


这似乎只发生在某些设备上,所以如果您正在开发 Apple Watch 应用程序,最好按如下方式跟踪状态:

var switchValue = false // the value you chose in storyboard
@IBAction func switchAction(value: Bool) {
// ignore value
    switchValue = !switchValue
// do something with switchValue
}

我也有同样的问题!

可能感兴趣:我看到这只发生在一只手表上,搭配 iPhone 5s。

我没有看到与 iPhone 6 配对的不同手表的相同问题。该问题也没有在模拟器上显示。

两款手表都是1.01版本,两款手机都是iOS8.3

我找不到直接修复,因为它看起来像是 WatchKit 中的某种错误。但是,解决方法非常简单。

我设置了一个布尔型成员变量,用来记录开关的初始状态。然后,当回调进入时,我反转成员变量的状态,并使用它而不是 WatchKit 传递的值(我现在忽略它!)。

希望对您有所帮助!如果您发现更多问题,或碰巧发现此问题已由 Apple 修复,请在此处分享该信息!

注意:我已将此作为 bug 提交给 Apple,作为雷达 21171938

皮特