从watchOS 2开始,我们有一个
我想获取对将在启动时显示的第一个界面控制器对象的引用,以设置其属性(例如传递数据存储对象)。
根据docs,
引用如下:
“根接口控制器位于应用程序的主要故事板中,并带有与之关联的主入口点对象。WatchKit在启动时显示根接口控制器,尽管应用程序可以在启动序列完成之前呈现不同的接口控制器。”
因此,我在
尽管正确的接口控制器已显示,但此时
在iOS应用程序中,您可以在
有没有办法在我的接口控制器显示之前(从外部)设置属性?这是一个错误吗?
非常感谢答案!
ExtensionDelegate
对象,类似于UIApplicationDelegate
(响应应用程序生命周期事件)。我想获取对将在启动时显示的第一个界面控制器对象的引用,以设置其属性(例如传递数据存储对象)。
根据docs,
WKExtension
上的rootInterfaceController
属性会返回初始控制器:引用如下:
“根接口控制器位于应用程序的主要故事板中,并带有与之关联的主入口点对象。WatchKit在启动时显示根接口控制器,尽管应用程序可以在启动序列完成之前呈现不同的接口控制器。”
因此,我在
ExtensionDelegate
中尝试以下操作:func applicationDidFinishLaunching() {
guard let initialController = WKExtension.sharedExtension().rootInterfaceController else {
return
}
initialController.dataStore = DataStore()
}
尽管正确的接口控制器已显示,但此时
rootInterfaceController
为空。有趣的是,如果我在接口控制器的willActivate()
中查询相同的属性,则该属性会被正确设置。在iOS应用程序中,您可以在
applicationDidFinishLaunching()
中获取根视图控制器,我认为在watchOS中应该也适用。有没有办法在我的接口控制器显示之前(从外部)设置属性?这是一个错误吗?
非常感谢答案!
rootInterfaceController
是空的,所以我最终在我的接口控制器子类中实例化了我的属性。不是很好,但这是我目前能做到的最好的。 :/ - József Veszadispatch_after
,将其设置为1秒,然后rootInterfaceController
属性具有预期的值。非常令人沮丧。@józsef-vesza - WilmarapplicationDidFinishLaunching
被调用两次,在第二次调用中,rootInterfaceController
不再是nil。非常奇怪。你是否已经提交了一个radar?如果你提交了,我很乐意复制它。 - Jeff V