You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向自定义BLE外设写入数据时出现CBATTErrorDomain Code=6错误求助

解决BLE写入时CBATTErrorDomain Code=6 "请求不支持"的问题

嘿,我帮你找到了问题的核心!你遇到的Error Domain=CBATTErrorDomain Code=6错误,是因为你的自定义BLE外设没有实现处理写入请求的关键代理方法。当中心设备用.withResponse类型发起写入时,外设必须给中心设备返回响应,没有对应的处理逻辑的话,系统就会抛出“请求不支持”的错误。

问题出在哪?

看你的外设端代码,你已经实现了didReceiveRead来处理读请求,但完全漏掉了peripheralManager(_:didReceiveWriteRequests:)这个专门处理写入请求的代理方法。中心设备发了带响应的写入请求,外设却不知道怎么处理,自然就报错了。

怎么修复?

在外设端的CBPeripheralManagerDelegate实现里,加上处理写入请求的方法,还要记得给每个请求返回响应。

补上缺失的代理方法

把这段代码加到你的外设端代理类里:

func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWrite requests: [CBATTRequest]) {
    // 遍历所有写入请求(可能多个)
    for request in requests {
        // 先确认请求的特征是我们自己定义的那个
        guard request.characteristic.uuid == characteristic.uuid else {
            peripheral.respond(to: request, withResult: .requestNotSupported)
            continue
        }
        
        // 检查请求有没有携带合法数据
        guard let newValue = request.value else {
            peripheral.respond(to: request, withResult: .invalidAttributeValueLength)
            continue
        }
        
        // 更新我们的特征值
        characteristic.value = newValue
        // 给中心设备返回成功响应
        peripheral.respond(to: request, withResult: .success)
        
        // 如果需要的话,还可以给订阅了这个特征的设备发通知
        if characteristic.properties.contains(.notify) {
            peripheral.updateValue(newValue, for: characteristic, onSubscribedCentrals: nil)
        }
    }
}

额外的小检查

  • 你创建CBMutableCharacteristic时,permissions已经设置了.writeable,这部分没问题。
  • 如果不想用带响应的写入,中心设备端也可以改成.withoutResponse,但还是建议实现上面的方法,这样数据写入的可靠性更高。

这样修改后,你的外设就能正确处理中心设备的写入请求,那个烦人的Code=6错误就会消失啦!

内容的提问来源于stack exchange,提问作者Ahil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 00:42:36