作为 willActivate 的一部分更新界面时的奇怪行为

Odd behavior when updating interface as part of willActivate

我有一个 WKInterfaceController subclass,它显示 6 行 WKInterfaceTable。这个class也是初始界面控制器。当通过 handleActionWithIdentifier:forLocalNotification 收到通知操作时,我会模态地呈现第二个界面控制器。用户不对模态呈现的界面控制器执行任何操作,但加载它会修改初始界面中行控制器使用的 6 个对象之一的状态。当模态控制器被关闭时,我的意图是在 table 中反映更新后的状态。

我检索更新的对象没有问题,因为它们的管理由另一个 class 处理,我可以简单地查询更新的数据。由于初始界面控制器已经执行awakeWithContext:,我只能依靠willActivate来更新界面。这似乎符合 Apple 的指导方针,因为我没有将界面作为该方法的一部分进行初始化,而只是对其进行了更新。

TL;DR;

当我通过行控制器更新行时,只有更新的值才能正确显示在单元格上。其他单元格使用故事板上设计时分配给我的单元格中标签的默认值。

例如

非常奇怪的是,这只发生在对 willActivate 的后续调用中。在 willActivate 中首次打开手表应用程序并更新界面时,它的行为符合预期。当由于模态关闭而被激活时,这种行为会逐渐加剧。

感谢任何想法。

我能想到两个可能的问题。

首先,WatchKit 界面控制器的行为就好像它们是页面集中的快照一样。在它们显示一次后,这些值在停用后不会更新,直到它们完全显示在屏幕上并且您的 willActivate 方法被调用。当界面不可见时,切换图像与切换 table 行标签相同。必须在 willActivate 内完成,否则它似乎会被丢弃。

我看到的另一个与此相关的问题是当您 setNumberOfRows 时,您需要更新所有行中的值。否则,您最终会得到您设置的自定义行值,以及故事板中所有其他行的默认值。如果您只是更新 willActivate 中特定行的值而不是在 Table 上调用 setNumberOfRows,那么我会说您应该向 Apple 的 Bug Reporting System 提交错误。