多个 CBCentralManager 实例?
Posted
技术标签:
【中文标题】多个 CBCentralManager 实例?【英文标题】:Multiple CBCentralManager instances? 【发布时间】:2015-05-18 17:26:08 【问题描述】:是否支持多个CBCentralManager
实例?如果是,它们是在哪个 ios 版本中开始支持的?
我在 Apple 邮件列表中发现 multiple emails 表明它们不是。但是,这不是通过例外或理论上的+sharedCentralManager
来强制执行的。一个说文档说它们不受支持。不过the documentation中不再提及,目前头文件注释(iOS 8.3 SDK)为:
/*!
* @class CBCentralManager
*
* @discussion Entry point to the central role. Commands should only be issued when its state is <code>CBCentralManagerStatePoweredOn</code>.
*
*/
我不希望 CBPeripheral
实例可以在 CBCentralManager
实例之间移植(这不是这个问题的意义所在),我只希望蓝牙堆栈中有多个“窗口”(没有任何不规则行为)。
【问题讨论】:
最好有一个 CBCentralManager 实例并围绕它设计您的应用程序。为什么需要多个? 我看不出这有多“好”——尤其是因为这本质上是在强制使用单例,我通常认为这是糟糕的设计。要么有效,要么无效。如果它不起作用,那很公平,但这似乎完全没有记录(而且它以前有记录,因此是问题)。 【参考方案1】:从 iOS 8.3 开始,似乎创建第二个 CBCentralManager
实例将导致第二个实例将其状态报告为 CBCentralManagerStateUnsupported
(2
)。因此,不支持CBCentralManager
的多个实例。
【讨论】:
我没有观察到相同的行为。我正在运行 8.3 并且有多个管理器,都处于开机状态。 @Kevin Hi,正如你所说,iOS 8.3 支持多个管理器,但它们都可以连接到同一个外围设备吗? 似乎有人从 Apple 支持那里得到了与此相矛盾的答案:***.com/questions/32221338/…以上是关于多个 CBCentralManager 实例?的主要内容,如果未能解决你的问题,请参考以下文章
使用 CoreBluetooth/CBCentralManager.h 框架
核心蓝牙 CBCentralManager 总是在 ipad2 上报告状态为未知