我有一个Watchkit Glance,我使用使用Darwin Notifications的MMWormwhole进行更新。一旦Glance"开启,我的意思是活跃/显示 - 在Apple Watch"关闭之前#34;因为节能,所以Watch屏幕是黑色/关闭的(我希望你能得到我;)......
当您按下Crown时,Glance会重新显示,但是如果某些内容发生了变化,那么它将不再得到通知,因此不会更新......
那么Glance在从节能关闭模式中醒来之前是否有任何生命周期调用"这样我可以再次更新UI?类似于"从背景模式回来"。我知道手表没有背景......我找不到任何东西......
我可以做任何变通办法或其他事情吗?
谢谢!
答案 0 :(得分:0)
生命周期,您可以查看this blog
当加载多个基于页面的接口控制器时(无论它们是根接口还是以模态方式呈现),在第一页上调用willActivate之前,将在所有控制器上调用init和awakeWithContext :.这意味着您可以通过在这两种方法中尽可能少地完成工作来提高应用程序的表面响应能力。因为这是一个常见问题,请注意awakeWithContext:不会再被调用。
虽然没有关于你应该在init和awakeWithContext中执行的工作的硬性规则,但是awakeWithContext:是你最早可以访问上下文的。因此,您可以决定在init中执行常规初始化,并在awakeWithContext中执行更多特定于上下文的工作:请注意,您可以使用这两种方法配置界面元素。
初始化接口控制器并传递其上下文后,唯一可以更新其接口的是接口处于活动状态。这意味着您可以在willActivate中执行更新(当接口变为活动状态时),并且可以在任何时候执行更新,直到调用didDeactivate。但是,您无法更新didDeactivate中的接口,因为该接口不再被视为活动状态。
下图说明了在实际Apple Watch硬件上运行的两个基于页面的界面控制器。我提到这一点,因为你在这里看到的NSExtensionContext通知不会在模拟器中传递。
应用程序启动后,您可以看到两个界面控制器都有机会初始化和配置其上下文。重要的是要注意,此图中的所有调用都发生在主线程上。
接下来,您会看到两个NSExtensionContext通知,> NSExtensionHostWillEnterForegroundNotification和> NSExtensionHostDidBecomeActiveNotification。通常,这两个通知非常可靠。但是,在我的测试中,我注意到 - 即使您在接口控制器的初始化类方法中注册为观察者 - 您可能也不会捕获前两个通知。所以,你需要做出相应的计划。
接下来,我滑到第2页。注意,在第一个调用didDeactivate之前,会在第二个接口控制器上调用willActivate。这与Apple Watch Programming Guide中的以下声明相反:
在转换期间,调用当前可见的接口控制器的didDeactivate方法,然后调用即将显示的接口控制器的willActivate方法。
根据我对模拟器和实际硬件的经验,这些文档似乎不正确或已过时。
旁注:呈现模态界面时会出现相同的序列。也就是说,在呈现的控制器上调用willActivate,然后在呈现控制器上调用didDeactivate。当模态界面被解除时,再次,在呈现控制器上调用willActivate,然后在呈现的(现在被解除的)控制器上调用didDeactivate。最后,正如您所期望的那样,如果不再对现已停用的控制器进行强引用,则将其解除分配(顺便说一下,从不同的线程)。
回到我们的两页示例。如果我放下手臂,您可以看到两个通知:NSExtensionHostWillResignActiveNotification和NSExtensionHostDidEnterBackgroundNotification。最后,在应用程序暂停之前,在第二个接口控制器上调用didDeactivate(Watch会保留终止您的应用程序的权利)。
等了几秒钟后,我举起手臂唤醒应用程序,在第二个接口控制器上调用willActivate之前,你可以看到两个NSExtensionContext通知。当控制器被推,弹出,呈现和解除时,这种模式仍在继续。
我们在这里探讨的生命周期对于分层接口,Glances和Notification接口是相同的,因此您可以在所有这些情况下利用这些事件。