2

我将通知设置为一个特征,然后将一些数据(即要读取的地址和读取的数据长度)写入另一个特征。将调用委托 didUpdateValueForCharacteristic,但特征值为零(应该有一些值)且长度正确。我还检查了委托 didWriteValueForCharacteristic。这将在我写入数据后调用,但在委托中,characteristic.value 为空,而characteristic.UUID 与我写的相同。

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

4

1 回答 1

2

我一直在遇到您在这里遇到的类似问题,所以我将尝试分享我所看到的。

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

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

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

我注意到的另一件事是,当你打电话时,在外围设备端

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

它返回一个 BOOL,告诉您数据是否已成功发送。如果它没有成功发送,那么它会停止尝试发送后续的,这可能会很痛苦。

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

于 2013-05-03T01:51:30.777 回答