响应peripheralManager的正确方法是什么:didReceiveWriteRequests?

时间:2013-02-28 18:56:17

标签: core-bluetooth

回复peripheralManager:didReceiveWriteRequests:的正确方法是什么?

标题文档说明:

“对于此方法的每次调用,respondToRequestWithResult应该只调用一次。”

didReceiveWriteRequests中,使用NSArray传递多个写入请求。

如果所有写入请求都成功处理,我们是否只是从列表中任意选择一个请求并将其用作respondToRequestWithResult的参数,因为respondToRequestWithResult方法只需要一个CBATTRequest参数而不是CBATTRequest附带的didReceiveWriteRequests列表?

我期望一种对称的响应方法,将请求列表作为参数。

1 个答案:

答案 0 :(得分:5)

来自Apple文档:Here

处理来自连接中心的写入请求也很简单。当连接的中心发送写入一个或多个特征值的请求时,外围设备管理器会调用其委托对象的peripheralManager:didReceiveWriteRequests:方法。这次,委托方法以包含一个或多个CBATTRequest对象的数组的形式向您发送请求,每个对象代表一个写请求。在确保可以满足写入请求之后,您可以编写特征值,如下所示:

myCharacteristic.value = request.value;

虽然上面的示例没有说明这一点,但在写入特征值时,请务必考虑请求的偏移属性。

正如您响应读取请求一样,每次调用peripheralManager:didReceiveWriteRequests:delegate方法时,只需调用一次respondToRequest:withResult:方法。也就是说,respondToRequest:withResult:方法的第一个参数需要一个CBATTRequest对象,即使你可能已经从peripheralManager收到了一个包含多个它们的数组:didReceiveWriteRequests:delegate方法。您应该传入数组的第一个请求,如下所示:

[myPeripheralManager respondToRequest:[requests objectAtIndex:0]

    withResult:CBATTErrorSuccess];