【发布时间】:2015-02-19 00:07:57
【问题描述】:
我有一个基本的 watchkit 应用程序,它加载基于页面的 3 个界面控制器导航。这很好用,但我想触发一个动作来移除页面控件,并从本质上恢复到应用首次加载时存在的原始 InterfaceController。
// load page based control, with 3 views. this works ok
[WKInterfaceController reloadRootControllersWithNames:@[@"pageController1",@"pageController2",@"pageController3"]
contexts:@[@"data1",@"data2",@"data3"]];
// attempt to reload original interface controller, identified by storyboard id
[WKInterfaceController reloadRootControllersWithNames:@[@"myInterfaceController"] contexts:@[@{}]];
基于页面的导航移除,原始导航在短微调后加载。但是,它无法正常运行,并且原始操作会导致此错误。
Extension[6766:123665] *********** ERROR
-[SPRemoteInterface _interfaceControllerClientIDForControllerID:] clientIdentifier for interfaceControllerID:(null) not found
有没有更好的方法来干净地重新加载原始 InterfaceController?
编辑,2/19
似乎还有其他一些操作也会导致此错误。例如,如果转到第二个 InterfaceController 然后 popController 返回,则经常出现错误。它总是与对该函数的二次调用有关。
[WKInterfaceController reloadRootControllersWithNames: contexts:]
EDIT2,3/18
如前所述,通过执行 seguePush、popController,然后尝试重新加载 RootControllersWithNames,这是 100% 可重现的。
如果 seguePush/popController 没有事先完成,那么 reloadRootControllersWithNames 就可以正常工作。
这种情况似乎是除了这个bug的multi->single-multi实例。
【问题讨论】:
-
在 Xcode 6.2 离开测试版之后仍然会发生这种情况,并且被认为是稳定的。
-
此链接stackoverflow.com/questions/28954007/… 中答案中的解决方法应该对您有所帮助。