如何修复 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
根据Apple
documentation
,如果可以发送更新,它将返回YES
,如果底层传输队列已满,则返回NO
。
我收到NO
。我应该如何解决这个问题?
【问题讨论】:
【参考方案1】:当输出队列已满时,需要延迟发送响应。
工作队列方案。
解决这个问题的最简单方法是创建一个worker queue,在其中插入要发送的数据块,并创建一个调度程序块来获取项目并将它们发送出去。当队列已满时,当前块被放回队列的头部,并在收到peripheralManagerIsReadyToUpdateSubscribers:
后尝试再次发送。如果 Central 断开或连接因其他原因断开,则应取消所有发送。
【讨论】:
以上是关于如何修复 CBPeripheralManager 传输队列已满?的主要内容,如果未能解决你的问题,请参考以下文章
获取 CBPeripheralManager 订阅的 Centrals
为啥我的 CBPeripheralManager 有广告但无法被发现?
CBPeripheralManager 延迟停止广告/位置管理器范围停止 iBeacon
CBPeripheralManager AddService 上的 iOS 崩溃断言失败: