WatchKit reloadRootControllersWithNames导致错误,与pageController或推/popup后

我有一个基本的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),然后尝试reloadRootControllersWithNames,可以在100%的时间内重现这一点。

如果事先没有完成seguePush / popController,那么reloadRootControllersWithNames将正常工作。

这种情况似乎是除了这个错误的multi-single-multi-instance以外。

这实际上不是一个错误,因为根据苹果:

您不能组合分层和基于页面的界面样式。 在devise时,您必须select最适合您应用内容的风格,并根据该风格进行devise。

所以不幸的是,我们不能在同一个Watch应用程序中混合使用分层和基于页面的导航模式。

在为Watch开发应用程序时,我们必须处理很多限制之一

这是Xcode 6.2 Beta 5中的WatchKit中的一个bug。请在苹果的Bug报告系统中join以下雷达 ,以帮助提高固定的优先级。

与此同时,我发现的解决方法可以在开发论坛上find。 你可以做的是添加一个虚拟的接口控制器到任何一个接口控制器页面集,所以你总是有两个。 这将修正错误,直到苹果得到的错误修正(希望在Beta 6)。 请欺骗!

我能通过在推送的视图控制器上不使用popController来解决这个问题的实例。 相反,我使用reloadRootControllersWithNames来代替popController。

如何通过一个例子允许推送和分页:

  1. 推一个视图控制器
  2. reloadRootControllersWithNames返回到原始控制器。 (过渡并不像animation一样,但足够了)
  3. 创build基于页面的视图控制器
  4. reloadRootControllersWithNames返回到原始控制器
  5. 根据需要重复1或3。

这消除了以非animationpopControllers为代价的错误,并允许部分推送和分页。 它不会允许更复杂的推送导航。

有没有一个推动电话导航到子接口控制器的更好的方法,但我还没有意识到它在手表上。

没有或上面的答案为我工作。 当我更改应用程序的图标名称和手表应用程序名称时,就开始了这个问题。 我解决了这个问题:

  • 1)点击你的手表应用程序目标>function>确保应用程序组处于打开状态。
  • 2)确保应用程序组已被选中。
  • 3)在圆圈的箭头刷新刷新图标(如果你已经有了它,这显然只是刷新这个东西)
  • 4 – 重复步骤1-3,但也适用于您的Watch App EXTENSION目标。
  • 5-点击“scheme”button(在“停止”button的右侧),然后点击“编辑scheme”。
  • 6 – 点击运行>信息7 – 在可执行文件中select你的目标(其实它应该已经select,但打开此窗口似乎刷新选项,并擦除错误)

显然上面所有这些东西都不会自动更新,当你改变图标名称(目标名称),你必须去这些菜单,并打开它们手动刷新它们。 可能对苹果感到羞耻?