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

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

【问题讨论】:

    标签: swift bluetooth bluetooth-lowenergy


    【解决方案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。
    • 太好了,很高兴为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2016-08-15
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多