我需要在一个按钮上创建/上传/启动航点任务。当用户按下按钮时,无人机应根据当前位置向上移动一定数量的点。用户可以停止任务,然后再次开始新任务。接下来是我的逻辑:
missionOperator.addListener(toUploadEvent: self, with: DispatchQueue.main) { (event) in
if event.currentState == .readyToExecute {
self.startMission()
}
}
我已经阅读了好几天的文档,试图理解这东西是如何工作的,但是我显然缺少了一些东西。侦听器是在航点任务操作员上创建的,但是如果我在加载任务之前创建侦听器,则不会调用它们。如果我每次加载任务时都创建侦听器,则多次调用startMission()(第一次调用一次,但在一个任务停止或完成后,下次调用startMission()两次)
所以,我想我的问题是:从我从侦听器调用startMission()以来,什么时候是添加侦听器并将其删除的合适时机?实际上,一种方法可以通过一个按钮初始化/上传/开始任务,并且能够多次执行此操作?
当上传成功且事件状态为readyToExecute时,您需要删除上传侦听器。同样,当事件包含错误或状态为就绪可以上传/不支持/断开连接时。在每种情况下,几乎都处于“正在上传”状态。
开始任务时,为执行事件添加一个侦听器,为完成事件添加一个侦听器。当任务停止/取消,出现错误或成功完成时,请再次删除这些内容。
即使您使用Swift,我还是建议您查看更完整的Objective C示例代码,其中包括几种不同类型任务的示例。