我将通知设置为一个特性,然后将一些数据(它是要读取的地址和读取数据长度)写入另一个特性。将调用委托didUpdateValueForCharacteristic,但feature.value为零(应具有某个值)且长度正确。 我还检查了委托didWriteValueForCharacteristic。这将在我写入数据后调用,但在委托中,characteristic.value为null,而characteristic.UUID与我写的相同。
因此,当调用didWriteValueForCharacteristic时没有错误,是否意味着写操作成功?如果是这样,为什么特征值为null?(我认为该值应该等于我在writeValue中写的:forCharacteristic:type:)
答案 0 :(得分:2)
我遇到了你在这里遇到的类似问题所以我会尝试分享我所看到的。
当您尝试从外围设备获取数据时,didWriteValueForCharacteristic不是您想要的。虽然你说你试图在某处写数据,但我不确定与获取更新通知有什么关系。
如果您使用的是通知设置,那么您应该专注于didUpdateValueForCharacteristic。
当调用didUpdateValueForCharacteristic时,它并不一定意味着已经完全传达了一个值。您必须记住,发送的数据只能少量发送(20个字节,如果我没记错的话),因此可能存在您正在查看的数据不完整的情况。
我注意到的另一件事是,当你打电话时,在外围方面。
[peripheralManager updateValue:dataToSent forCharacteristic:aCustomCharacteristic onSubscribedCentrals:nil];
它返回一个BOOL,告诉您数据是否已成功发送。如果没有成功发送,那么它会停止尝试发送后续的,这可能很痛苦。
当我尝试将int值作为数据从外围设备发送到客户端时,我使用的是iPad和iPhone。当iPhone是客户端而iPad是外设时,我遇到了问题。我得到的null值与你正在处理的非常相似,但当我切换两者时,我得到了应该得到的正确值。这也可能是您正在使用的设备的问题,因为我不完全确定您可以使用iPad作为外围设备。