这2天在做智能硬件固件升级时碰到往一个characteristic中写数据能成功一次或者一次都不成功,但Android版本固件升级功能没有问题,所以驱动也坚持其代码没有问题,因为牵涉到GCD多线程,加上本人是兼职iOS开发者(主攻Android),怕自己写的代码有问题,于是先默默地查看代码。先贴出此问题关联的iOS API:
typedef NS_ENUM(NSInteger, CBCharacteristicWriteType) {
CBCharacteristicWriteWithResponse = 0,
CBCharacteristicWriteWithoutResponse,
};
注意此API第三个参数为上面枚举类型,如果设置为WithResponse,则可以写成功一次,如果为WithoutResponse,则一次也不能写成功。
- (void)writeValue:(NSData *)data forCharacteristic:(CBCharacteristic *)characteristic type:(CBCharacteristicWriteType)type
在google和stackflow上爬了半天也没有找到相关的问题,后来再看了一遍Apple CoreBluetooth参考,知道这个 type对代码有一定影响,在没有办法的时候,只好说服驱动帮忙修改一下对应的characteristic.property供我调试使用下,将property添加上withoutResponse,一试果然成功了。