我正在使用核心蓝牙。我正在做简单的写操作。在外围方面,将这个价值纳入:
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
因为我实现了上面的方法,所以要花费太多时间来写入值。而且我正在中央收到警告:
CoreBluetooth[WARNING] Unknown error: 241
这很奇怪,因为当我向docs看时,我发现错误代码只有0到17。有没有人能解决这个问题?
答案 0 :(得分:1)
我仍然没有清除该错误代码。但现在解决了这个问题。我创建了属性CBCharacteristicPropertyWriteWithoutResponse
的特征,因此上面的错误被删除了。数据也顺畅写入外设。但仍然想知道这个错误。
答案 1 :(得分:1)
确保您正在致电:
斯威夫特:func respondToRequest(request: CBATTRequest!, withResult result: CBATTError)
目标-C:
- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result
成功通过CBATTError.Success并仅调用该函数一次。例如。来自委托回调:
func peripheralManager(peripheral: CBPeripheralManager!, didReceiveWriteRequests requests: AnyObject[]!)
呼叫:
peripheral.respondToRequest(requests[0] as CBATTRequest, withResult: CBATTError.Success)
这解决了我们的问题。
答案 2 :(得分:1)
我同意迈克尔的观点。我以前遇到过同样的问题,最后得到了解决。
如果中央设备将数据写入外围设备,它可以在 CBCharacteristicPropertyWriteWithoutResponse 模式或 CBCharacteristicPropertyWriteWithResponse 模式下工作。第一个不需要外设响应,但第二个响应。如果中央设备在需要时没有从外围设备接收响应,则会发生此错误。由于中央设备只等待几秒钟,因此您应该调用方法
- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result
只要代理方法
就响应写操作- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
被召唤。
如果写入数据很大,外围设备可能会收到多个CBATTRequest。请记住,只响应请求数组的第一个请求。
答案 3 :(得分:1)
241
或0xF1
位于蓝牙属性协议(ATT)的“应用程序错误”范围内,请参阅第3卷,第F部分,3.4.1蓝牙4.0规范的错误处理。不幸的是,Apple没有记录这些内容的使用。
根据{{委托回调。