如何将 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 活动继续到下一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

将数据从一个视图控制器传递到下一个视图控制器,而无需在 swift 中进行 segue

如何隐藏 Tabbarcontroller 的第一个视图控制器并直接转到下一个控制器但应在底部显示标签栏项目

我在 CollectionViewCell 内有一个 UIButton,它又在 TableViewCell 内。如何通过单击 UIButton 导航到下一个视图控制器?

在转到下一个视图控制器(Swift)之前进行异步调用

iOS 如何知道哪个视图控制器应该处于活动状态?

Xcode 图像将 ImageView 链接到下一个 View Controller