并发委托方法

时间:2014-03-15 02:43:26

标签: ios core-bluetooth

我目前正在使用Corebluetooth,我的手机充当中心,还有一个独立的外围设备。

我使用didUpdateValueFor委托方法成功从外围设备读取数据。我遇到的问题是我在同一时间发送多个信息包。

例如,我发送" abc"首先和" def"后来。当中心更新来自外围设备的指示读数时,我应该能够得到" abcdef"在末尾。如果我以每秒10个数据包的速度发送指示,这可以正常工作。

然而,一旦我的速度达到默认指示速度,它就太快了,中央无法跟上。我只得到第一个指示" abc",但我从未收到" def"的指示。

有没有办法可以强制didUpdateValueFor方法同时运行,因此无论速度如何都会捕获所有传入的通知?

2 个答案:

答案 0 :(得分:2)

best-practices chapter of the Core Bluetooth Programming Guide建议通过setNotifyValue:forCharacteristic:使用订阅,而不是普通读取,以获取经常更改的特征。

您的问题不清楚您是通过readValueForCharacteristic使用订阅还是投票:

答案 1 :(得分:1)

我认为您的意思是didUpdateValueForCharacteristic而不是didWriteValueForCharacteristic。否则,问题似乎不正确,因为didWriteValueForCharacteristic不能用于从远程设备读取数据(除非您使用错误代码进行通信 - 您不应该这样做)。)

有两种方法可以将数据从外设推送到中心:指示和通知。

  • 如果发送太快或出于任何原因,通知可能会被丢弃。
  • 指示一次只能发送一次(您必须等到中央回复并确认已经处理了指示,然后再发送另一个!)。

我看到了当前实现可能不正确的多种方式:

  • 您不是在等待处理值确认数据包并过早发送下一个指示。
  • 您正在中心写入客户端特性配置之前发送指示/通知。
  • 您的外围设备已标记了支持通知和指示的特征。在这种情况下,Core Bluetooth仅支持通知,并且不启用指示,在这种情况下,您将返回不可靠的通知([CBPeripheral setNotifyValue:forCharacteristic:]

      

    如果指定的特征配置为允许通知和指示,则调用此方法仅启用通知。

  •