WKInterfaceLabel.setText不反映模态viewController解雇后的更改

时间:2015-07-03 02:12:47

标签: swift cocoa-touch watchkit watch-os-2

我正在为Apple Watch开发一款简单的视频游戏。在awakeWithContext()中,我调用自己的方法startNewGame(),并在从我的模态viewController接收通知时再次调用它。一切正常。然后在确定游戏结束后,我调用self.presentControllerWithName()。 当玩家解雇该控制器时,我调用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(),它返回一个前导零的字符串。无论如何,我然后将文本设置在它们上面......没有任何反应。两个棋盘显示的分数与视频控制器显示之前的分数相同。只有当他们下次更新以响应玩家的动作时,他们才会更新以反映正确的值。因为我在解雇模态viewController后不久运行代码时只遇到这个问题,我怀疑有一些连接。无论如何,我很难过,一些帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我遇到了使用sendMessage从iPhone接收数据的相同问题。

我的代码很简单:

dispatch_async(dispatch_get_main_queue(),{
  if let error = error {
    NSLog("showing error: \(error)");
    self.lblTitle.setText("Error...");
  } 
});

对我来说,正在记录消息,但界面没有得到更新。

结束我使用reloadRootControllersWithNames显示多个页面,当我尝试更新未显示的页面中的标签时,忽略了更新。

我通过聆听willActivatedidDeactivate来修复它,看看是否要更新标签或是否保存文字以便我可以在显示页面时应用它。

显然这是by design