.writeValue不允许我将十六进制字符串写入特征以启用通知

时间:2019-02-05 21:07:03

标签: swift xcode bluetooth-lowenergy

我的外围设备要求我将十六进制值0x0001写入CCCD描述符以启用通知。当我尝试使用.notify属性将值写入特征时,出现以下错误:

Cannot invoke 'writeValue' with an argument list of type '(Data:String, for: CBCharacteristic)'

如何将值写入特性,以便接收通知?

我试图删除.writeValue行并仅保留.setNotifyValue行,但是当我从设备发送数据时,不会收到通知。收到通知后,我是否必须读取该值?通知是否应该将值写入我的输出中?

  if characteristic.properties.contains(.notify) {
    print("\(characteristic.uuid): properties contains .notify")
    NUB5.writeValue(Data: "0x0001", for: characteristic)
    NUB5.setNotifyValue(true, for: characteristic)
  }

// BL652要求将0x0001的值写入TX CCCD以通知我们数据。

2 个答案:

答案 0 :(得分:0)

  1. setNotifyValue(true, for: characteristic)应该足够了。 您是否实现了peripheral(_:didUpdateValueFor:error:)方法?您能显示代码吗?

  2. writeValue接受Data输入,但是您尝试传递String。您需要对其进行编码,例如:

let encodedString = "Lorem ipsum".data(using: .utf8)

let number = 1
let encodedNumber = withUnsafeBytes(of: number) { Data($0) }

答案 1 :(得分:0)

根据Fayer的回答,我不得不对数据进行编码。以下代码在.writeValue之前对我有用:

var TxNotify:UInut=0001
let enableBytes = NSData(bytes: &TxNotify, length:8)
NUB5.writeValue(enableBytes as Data, for: characteristic, type: .withResponse)
NUB5.setNotifyValue(true, for: characteristic)