WatchKit reloadRootControllersWithNames导致错误,使用pageController或push / pop之后

时间:2015-02-19 00:07:58

标签: ios watchkit

我有一个基本的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

似乎还有一些其他操作也会导致此错误。例如,如果segue到第二个InterfaceController然后popController返回,则经常出现错误。它始终与此函数的二次调用相关。

[WKInterfaceController reloadRootControllersWithNames: contexts:]

EDIT2,3 / 18

如前所述,通过执行seguePush,popController,然后尝试reloadRootControllersWithNames,这可以100%重现。

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

这种情况似乎是此bug的多>单多实例的补充。

4 个答案:

答案 0 :(得分:2)

这实际上不是一个错误,因为据Apple说:

  

您无法组合分层和基于页面的界面样式。在设计时,您必须选择最适合您应用的内容和风格设计的样式。

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

在为Watch

开发应用程序时,我们必须处理的许多限制中的一个

答案 1 :(得分:1)

这是Xcode 6.2 Beta 5中WatchKit中的一个错误。请在Apple的radar上删除以下Bug Reporting System,以帮助提高优先级以解决此问题。

与此同时,我可以在dev forums找到我找到的解决方法。您可以做的是将虚拟接口控制器添加到任何单个接口控制器页面集,以便您始终拥有两个。这将解决错误,直到Apple得到修复的错误(希望在Beta 6中)。请欺骗!

答案 2 :(得分:0)

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

这如何允许推送和分页,例如:

  1. 推送视图控制器
  2. reloadRootControllersWithNames返回原始控制器。 (转换不是那么动画,但已足够)
  3. 创建基于页面的视图控制器。
  4. reloadRootControllersWithNames返回原始控制器
  5. 根据需要重复1或3。
  6. 这消除了以非动画popControllers为代价的错误,并允许部分推送和分页。但它不允许更复杂的推送导航。

    可能有一种更好的方法可以在没有推送呼叫的情况下导航到子接口控制器,但我还没有在手表上知道它。

答案 3 :(得分:0)

没有或上面的答案对我有用。当我更改应用程序的图标名称和监视应用程序名称时,就会出现此问题。我这样解决了:

  • 1)点击您的Watch app Target>能力>确保应用程序组 在ON。
  • 2)确保已选择App Group。
  • 3)圆圈箭头上的Clic刷新图标(这显然只是 如果你已经拥有它,请刷新这个东西)
  • 4 - 重复步骤1-3,但也适用于Watch App EXTENSION目标。
  • 5 - 单击Scheme按钮(在STOP按钮的右侧), 和编辑方案上的clic。
  • 6点击运行>信息7-在可执行文件中选择您的目标(实际上它 应该已经选择但打开此窗口似乎 刷新选项,并擦除错误)

显然,当您更改图标名称(目标名称)时,上述所有这些内容都不会自动更新,您必须转到这些菜单并打开它们以手动刷新它们。也许对苹果感到羞耻?