【问题标题】:CoreBlueTooth delegate didWriteValueForCharacteristic called with a value nullCoreBlueTooth 委托 didWriteValueForCharacteristic 调用,值为 null
【发布时间】:2013-01-24 06:19:27
【问题描述】:

我将 notify 设置为一个特性,然后将一些数据(即要读取的地址和读取的数据长度)写入另一个特性。将调用委托 didUpdateValueForCharacteristic,但特征值为零(应该有一些值)且长度正确。 我还检查了委托 didWriteValueForCharacteristic。这会在我写完数据后调用,但是在delegate中,characteristic.value为null,而character.UUID和我写的一样。

那么当didWriteValueForCharacteristic被调用且没有错误时,是不是说明写操作成功了呢?如果是这样,为什么特征值是null?(我认为该值应该等于我在writeValue中写的:forCharacteristic:type:)

【问题讨论】:

    标签: ios core-bluetooth


    【解决方案1】:

    我在这里遇到了类似的问题,所以我会尝试分享我所看到的。

    didWriteValueForCharacteristic 不是您尝试从外围设备获取数据时想要的。尽管您说您正在尝试在某处写入数据,但我不确定这与获取更新通知有什么关系。

    如果您使用通知设置,那么您应该关注 didUpdateValueForCharacteristic。

    当 didUpdateValueForCharacteristic 被调用时,它并不一定意味着一个值已经被完全传达。您必须记住,正在发送的数据只能以少量(20 个字节,如果我没记错的话)发送,因此可能存在您正在查看的数据不完整的情况。

    我注意到的另一件事是,当您调用时在外围设备端

     [peripheralManager updateValue:dataToSent forCharacteristic:aCustomCharacteristic onSubscribedCentrals:nil];
    

    它返回一个 BOOL,告诉你数据是否成功发送。如果未成功发送,则停止尝试发送后续的,这可能会很痛苦。

    当我尝试将 int 值作为数据从外围设备发送到客户端时,我使用的是 iPad 和 iPhone。当 iPhone 是客户端而 iPad 是外围设备时,我遇到了问题。我得到的空值很像你正在处理的,但是当我切换这两个时,我得到了我应该得到的正确值。这也可能是您使用的设备的问题,因为我不完全确定您是否可以将 iPad 用作外围设备。

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      相关资源
      最近更新 更多