2

我创建了一个具有 3 个启用 Sphero 的流的 iOS 应用程序。我最终在每个 viewDidLoad 中在线重写了 setupRobotConnection 和 handleRobot,然后在每个 prepareForSegue 方法中关闭了连接。它在大多数情况下都有效,但 NavigationController 的后退按钮可能会搞砸。我认为这不是连接到 Sphero 并保持连接的最佳方式。

对于我的应用程序,每个流程都有略微不同的 handleRobotOnline 需求流程 1:无需驾驶,需要 dataStreaming 和 AsyncData 流程 2:用于发送命令的多人游戏类。流程 3:使用需要 dataStreaming 和 AsyncData 的 1 个视图的操纵杆驱动

我的问题是:对于多视图应用程序,最好的地方是:1)订阅应用程序通知?2) 订阅机器人在线/离线通知?3) 检查应用程序与机器人的连接类型是否正确(driveControl、sharedMultiplayer、dataStreaming)?

如有必要,我可以粘贴代码

4

1 回答 1

3

最好管理您与 Sphero 的连接并在一处打开/关闭它。我发现在 AppDelegate 或 RootViewController 中最容易做到这一点。

对于 AppDelegate:

  • 在 applicationDidBecomeActive 和 applicationWillEnterForeground 上打开连接
  • 在 applicationWillResignActive 和 applicationWillTerminate 上关闭连接
  • 在应用程序 didFinishLaunchingWithOptions 中注册机器人状态通知

如果您想在 RootViewController 中管理连接,请在加载时注册机器人通知以及上述相同的应用程序状态通知并执行相同的连接处理。

通过在 AppDelegate/RootViewController 中连接,您可以让其他 ViewController 不关心处理连接。如果您有逻辑在 AppDelegate/RootViewController 中通知用户,您可以让他们假设 Sphero 已连接,或者您可以共享状态。

至于您提到的特定用例,我建议如下: 1. 在 vi​​ewDidLoad 上添加数据流和响应观察器,您还应该在此处启用数据流。删除 viewDidUnload 上的观察者并禁用数据流。2. 像往常一样使用这里的多人游戏类。3. 在 vi​​ewDidLoad 上添加数据流和响应观察器,您还应该在此处启用数据流。删除 viewDidUnload 上的观察者并禁用数据流。正常发送操纵杆滚动命令。

如果您想了解有关机器人连接状态更改的信息,您可以在每个视图 viewDidLoad/viewDidUnload 调用中注册/取消注册连接通知。

于 2013-05-10T20:17:58.687 回答