【问题标题】:What is the correct way to respond to peripheralManager:didReceiveWriteRequests?响应 peripheralManager:didReceiveWriteRequests 的正确方法是什么?
【发布时间】:2013-02-28 18:56:17
【问题描述】:

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

标题文档指出:

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

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

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

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

【问题讨论】:

    标签: core-bluetooth


    【解决方案1】:

    来自 Apple 文档:Here

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

    myCharacteristic.value = request.value;
    

    虽然上面的例子没有说明这一点,但是在写入你的特征值时一定要考虑到请求的偏移属性。

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

    [myPeripheralManager respondToRequest:[requests objectAtIndex:0]
    
        withResult:CBATTErrorSuccess];
    

    【讨论】:

    • 当你有一组请求时,你在第一个请求中传递超级混乱,这有什么原因吗?
    猜你喜欢
    • 2016-09-12
    • 2019-01-19
    • 2019-10-09
    • 2014-11-07
    • 1970-01-01
    • 2010-09-20
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多