我正在为 Apple Watch 开发一款简单的视频游戏。在 awakeWithContext() 中,我调用自己的方法 startNewGame(),并注册它,以便在收到来自模态视图 Controller 的通知时再次调用它。这一切都很好。然后在确定游戏结束后,我调用 self.presentControllerWithName()。 当玩家关闭该 Controller 时,我调用 self.dismissController()。然后我触发一个通知,再次调用 startNewGame()。这就是事情变得奇怪的地方。
self.score = 0
let scoreString = formatScore(0) //"0000"
self.scoreboard.setText(scoreString)
let hiScore = NSUserDefaults.standardUserDefaults().integerForKey("hiScore")
let hiScoreString = formatScore(hiScore)
self.hiScoreboard.setText(hiScoreString)
上面摘自 startNewGame() 的内容显示了我重置分数并更新两个“记分板”(两个 WKInterfaceLabels),它们以拟物化的老式 LCD 方式显示分数。因此,我调用 formatScore() ,它返回一个带有前导零的字符串。不管怎样,我然后在他们身上都设置了文本,然后……什么也没有发生。两个棋盘显示的分数与显示游戏结束 View Controller 之前相同。只有当它们下次根据玩家的操作进行更新时,它们才会更新以反射(reflect)正确的值。因为我只有在模态视图 Controller 关闭后不久运行代码时才会遇到此问题,所以我怀疑存在某种联系。不管怎样,我很困惑,非常感谢一些帮助。
最佳答案
我在使用 sendMessage
从 iPhone 接收数据时遇到了同样的问题。
我的代码非常简单:
dispatch_async(dispatch_get_main_queue(),{
if let error = error {
NSLog("showing error: \(error)");
self.lblTitle.setText("Error...");
}
});
对我来说,消息正在被记录,但界面没有更新。
最终我使用 reloadRootControllersWithNames
显示多个页面,当我尝试更新未显示的页面中的标签时,更新被忽略。
我通过监听 willActivate
和 didDeactivate
来修复它,看看是否更新标签或是否保存文本,以便我可以在显示页面时应用它。
显然这是by design .
关于swift - WKInterfaceLabel.setText 不反射(reflect)模式 viewController 关闭后的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197428/