我创建了一个拥有3个Sphero启用流的iOS应用。我最终在每个viewDidLoad中重写setupRobotConnection和handleRobot,然后在每个prepareForSegue方法中关闭连接。它适用于大多数情况,但NavigationController的后退按钮可以搞砸了。我认为这不是连接到Sphero并保持连接的最佳方式。
对于我的应用程序,每个流程的handleRobotOnline需求略有不同 流程1:无需驾驶,需要dataStreaming和AsyncData 流程2:用于发送命令的多人游戏类。 流程3:操纵杆驾驶1视图,需要dataStreaming和AsyncData
我的问题是:对于多视图应用,哪里是最佳地点: 1)订阅应用程序通知? 2)订阅机器人在线/离线通知? 3)检查应用程序是否具有与机器人(driveControl,sharedMultiplayer,dataStreaming)的正确连接类型?
我可以在必要时粘贴代码
答案 0 :(得分:3)
最好管理与Sphero的连接并在一个地方打开/关闭它。我发现在AppDelegate或RootViewController中执行此操作最简单。
对于AppDelegate:
如果要管理RootViewController中的连接,请在加载时注册机器人通知以及上述相同的应用程序状态通知,并执行相同的连接处理。
通过连接AppDelegate / RootViewController,您可以允许其他ViewControllers不关心处理连接。如果您有在AppDelegate / RootViewController中通知用户的逻辑,或者您可以共享状态,您可以让他们假设已连接Sphero。
至于您提到的特定用例,我建议您使用以下内容: 1.在viewDidLoad上添加数据流和响应观察器,您还应该在此处启用数据流。删除viewDidUnload上的观察者并禁用数据流。 2.像往常一样使用多人游戏课程。 3.在viewDidLoad上添加数据流和响应观察器,您还应该在此处启用数据流。删除viewDidUnload上的观察者并禁用数据流。正常发送操纵杆滚动命令。
如果您想了解有关机器人连接状态更改的信息,您可以在每个视图viewDidLoad / viewDidUnload调用中注册/取消注册连接通知。