如何将 BLE 活动继续到下一个视图控制器

Posted

技术标签:

【中文标题】如何将 BLE 活动继续到下一个视图控制器【英文标题】:How to continue BLE activities onto next view controller 【发布时间】:2016-03-21 18:58:19 【问题描述】:

我正在开发一个应用程序,它可以扫描附近的 BLE 设备,连接到其中一个设备,然后与连接的设备进行通信。我尝试在 2 个视图控制器中执行此操作,控制器 A 和控制器 B。 Controller-A 将扫描附近的设备并连接到其中一个。控制器-B 将与连接的设备交换数据。 Controller-A 扩展了 CBCentralManagerDelegate。我的问题是:当我的应用程序切换到视图控制器-B 时,它没有从 CBCentralManager 获得回调。我必须在控制器 B 中再次初始化 CBCentralManager。我还必须断开设备与控制器 A 的连接,然后在控制器 B 中重新连接。有更好的方法吗?谢谢。

【问题讨论】:

【参考方案1】:

将您的 BLE 相关代码放在一个集中的地方,例如BLEMaganer(更好)或 AppDelegate(一般)。这样controllerA和controllerB就可以共享同一个centlManager实例了。

例如,当前您在控制器A 中有一个属性centralManager,并在控制器A 中实现它的委托。你通过controllerA.centralManager访问centralManager。

centralManager 属性移动到AppDelegate,以及其他相关代码。然后你可以通过

访问 centtrolManager 实例
(UIApplication.sharedApplication().delegate as! AppDelegate).centralManager.

【讨论】:

在那个集中的地方,我如何将数据发送回控制器A和控制器B。 ControllerA 和 controllerB 不是单例的。我如何知道数据已发送回我在屏幕上运行的实例?谢谢。 我了解如何访问 sharedApplication。问题是:如何将数据从 sharedApplication 取回给 controllerA。例如,在获取到附近的设备后,sharedApplication如何将设备名称发送回controllerA。谢谢。 目前你在控制器A中实现委托,当它被调用时你更新视图。现在委托已在 AppDelegate 中实现,因此您需要一种方法来通知控制器 A,该数据已准备好。我更喜欢 NSNotification。 效果很好!我把所有 ble 的东西放在一个单独的类中。我从我的控制器实例化 ble 类。当我将控制权传递给controllerB 时,我在prepareForSegue 中将实例传递给controllerB。所以,我一直使用同一个实例。我使用 NSNotificationCenter.defaultCenter() 将数据发送回控制器。我还在控制器中使用静态变量,因此 ble 类可以直接更改它们。谢谢你的建议,dichen。 太好了,很高兴为您提供帮助。

以上是关于如何将 BLE 活动继续到下一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章