swift - WKInterfaceLabel.setText 不反射(reflect)模式 viewController 关闭后的更改

标签 swift cocoa-touch watchkit watchos-2

我正在为 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 显示多个页面,当我尝试更新未显示的页面中的标签时,更新被忽略。

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

显然这是by design .

关于swift - WKInterfaceLabel.setText 不反射(reflect)模式 viewController 关闭后的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197428/

相关文章:

ios - 对 `InterfaceController` 使用 `ComplicationController' 逻辑

objective-c - 是否可以在 Apple Watch App 中水平滚动多个组?

ios - 如何测试 Apple Watch 未连接到 iPhone 的场景

swift - 无法在 swift 中共享 pdf(仅限 WhatsApp)

ios - WKWebview iOS(快速): Keep session connected after app closed

iphone - PhoneGap iPad 启动屏幕不适合

ios - 在 UIActivityIndi​​catorView 旋转时禁用所有输入

swift - 努力在自定义类和 View Controller 之间的标签中显示数据

ios - 如何使用swift在IOS App中缓存过期图像

iphone - 点击时隐藏导航栏