从watchOS 2开始,我们有一个ExtensionDelegate
对象,类似于UIApplicationDelegate
(对应用程序生命周期事件做出反应)。
我希望获得对第一个Interface Controller对象的引用,该对象将在启动时显示,以在其上设置属性(例如传入数据存储对象)。
根据docs,rootInterfaceController
上的WKExtension
属性回复了初始控制器:
根接口控制器位于应用程序的主故事板中 并具有与之关联的主入口点对象。 WatchKit 在启动时显示根接口控制器,尽管如此 app可以在发布之前呈现不同的界面控制器 序列完成。
所以我在ExtensionDelegate
中尝试以下内容:
func applicationDidFinishLaunching() {
guard let initialController = WKExtension.sharedExtension().rootInterfaceController else {
return
}
initialController.dataStore = DataStore()
}
即使显示正确的接口控制器,此时rootInterfaceController
也为零。有趣的是,如果我在接口控制器的willActivate()
中查询相同的属性,则属性设置正确。
在iOS应用中,您已经可以在applicationDidFinishLaunching()
中获得根视图控制器,我认为它应该对watchOS也一样。
有没有办法在界面控制器显示之前(从外部)设置属性?这是一个错误吗?
非常感谢您的回答!
答案 0 :(得分:0)
您可以将代码移至applicationDidBecomeActive。
此页面描述了观看应用的状态。调用applicationDidFinishLaunching时,应用程序处于非活动状态。