如何修复 CBPeripheralManager 传输队列已满?

Posted

技术标签:

【中文标题】如何修复 CBPeripheralManager 传输队列已满?【英文标题】:How to fix CBPeripheralManager's transmit queue is full? 【发布时间】:2014-04-23 09:38:31 【问题描述】:

CBPeripheralManager 的方法有问题。

- (BOOL)updateValue:(NSData *)value forCharacteristic:(CBMutableCharacteristic *)characteristic onSubscribedCentrals:(NSArray *)centrals

根据Appledocumentation,如果可以发送更新,它将返回YES,如果底层传输队列已满,则返回NO

我收到NO。我应该如何解决这个问题?

【问题讨论】:

【参考方案1】:

当输出队列已满时,需要延迟发送响应。

工作队列方案。 解决这个问题的最简单方法是创建一个worker queue,在其中插入要发送的数据块,并创建一个调度程序块来获取项目并将它们发送出去。当队列已满时,当前块被放回队列的头部,并在收到peripheralManagerIsReadyToUpdateSubscribers: 后尝试再次发送。如果 Central 断开或连接因其他原因断开,则应取消所有发送。

【讨论】:

以上是关于如何修复 CBPeripheralManager 传输队列已满?的主要内容,如果未能解决你的问题,请参考以下文章

获取 CBPeripheralManager 订阅的 Centrals

为啥我的 CBPeripheralManager 有广告但无法被发现?

CBPeripheralManager 延迟停止广告/位置管理器范围停止 iBeacon

CBPeripheralManager AddService 上的 iOS 崩溃断言失败:

CBPeripheralManager startAdvertising 在 OS X yosemite 上不起作用

如何判断 CLLocationManager 是不是正在主动扫描信标?