Swift 如何在下一个视图控制器上继续执行BLE活动

Swift 如何在下一个视图控制器上继续执行BLE活动,swift,bluetooth,bluetooth-lowenergy,Swift,Bluetooth,Bluetooth Lowenergy,我正在开发一个应用程序,可以扫描附近的BLE设备,连接到其中一个设备,并与连接的设备通信。我试着在两个视图控制器(控制器A和控制器B)中执行此操作。控制器A将扫描附近的设备并连接到其中一个。控制器B将与连接的设备交换数据。控制器A扩展了CBCentralManagerDelegate。我的问题是:当我的应用程序切换到view controller-B时,它不会收到来自CBCentralManager的回拨。我必须在控制器B中再次初始化CBCentralManager。我还必须断开设备与控制器A的

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

将您与BLE相关的代码放在一个集中的位置,例如Blemagner(更好)或AppDelegate(一般)。这样controllerA和controllerB就可以共享同一个centrolManager实例

例如,当前您在controllerA中有一个属性
centralManager
,并在controllerA中实现其委托。您可以通过
controllerA.centralManager
访问centralManager

centralManager
属性以及其他相关代码移动到
AppDelegate
。然后,您可以通过以下方式访问centrolManager实例:

(UIApplication.sharedApplication().delegate as! AppDelegate).centralManager.

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