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

时间:2014-04-23 09:38:31

标签: ios objective-c bluetooth-lowenergy core-bluetooth

我在CBPeripheralManager的方法中遇到了问题。

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

根据Apple documentation,如果可以发送更新,它将返回YES,如果基础传输队列已满,则返回NO

我得到了NO。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

工作人员队列计划。 解决此问题的最简单方法是创建一个worker queue,您可以在其中插入要发送的数据块,并创建一个调度程序块,用于获取项目并将其发送出去。当队列已满时,将当前块放回队列的头部,并在收到peripheralManagerIsReadyToUpdateSubscribers:之后再次尝试发送。如果由于其他原因导致中心断开或连接中断,则应取消所有发送。