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

问题描述 投票:4回答:1

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

标题文档指出:

“对于这种方法的每次调用,respondToRequestWithResult应该被称为恰好一次。”

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

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

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

core-bluetooth
1个回答
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];
© www.soinside.com 2019 - 2024. All rights reserved.