Swift 服务的外围DID发现特性中不允许UUID

Swift 服务的外围DID发现特性中不允许UUID,swift,core-bluetooth,Swift,Core Bluetooth,我正在尝试让两个运行在不同设备上的程序通过蓝牙与CoreBluetooth进行通信。我可以从管理器中查找和连接外围设备,也可以在连接的外围设备中浏览服务,但当我尝试并尝试查找特征时,我得到错误指定的UUID不允许用于此操作。并且正如预期的那样,服务的特征为零 这是什么意思?我试图通过指定目标的UUID和不指定UUID来发现特征,两者都显示了这个错误 这是打印错误的函数 func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacter

我正在尝试让两个运行在不同设备上的程序通过蓝牙与CoreBluetooth进行通信。我可以从管理器中查找和连接外围设备,也可以在连接的外围设备中浏览服务,但当我尝试并尝试查找特征时,我得到错误
指定的UUID不允许用于此操作。
并且正如预期的那样,服务的特征为零

这是什么意思?我试图通过指定目标的UUID和不指定UUID来发现特征,两者都显示了这个错误

这是打印错误的函数

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
    print(error.localizedDescription)//prints "The specified UUID is not allowed for this operation."
    if service.characteristics != nil {
        for characteristic in service.characteristics! {
            if characteristic.uuid == CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1") {
                print("characteristic found")
                peripheral.readValue(for: characteristic)
            }
        }
    }
}
这是我寻找外设的地方

    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    if peripheral.services != nil {
        for service in peripheral.services! {
            if service.uuid == CBUUID(string: "dc495108-adce-4915-942d-bfc19cea923f") {
                peripheral.discoverCharacteristics(nil, for: service)
            }
        }
    }
}
这就是我在另一台设备上添加服务特性的方式

service = CBMutableService(type: CBUUID(string:"dc495108-adce-4915-942d-bfc19cea923f"), primary: true)
characteristic = CBMutableCharacteristic(type: CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1"), properties: .write, value: nil, permissions: .writeable)
service.characteristics = [characteristic]

我尝试了许多不同的属性和权限组合(包括.read/.readable),但我得到了相同的错误。

您试图读取设置为“仅写”的特征值,因此Core Bluetooth会给您一个错误;读取操作对于指定的特性无效

如果希望特征既可读又可写,则需要指定以下内容:

service = CBMutableService(type: CBUUID(string:"dc495108-adce-4915-942d-bfc19cea923f"), primary: true)
let characteristic = CBMutableCharacteristic(type: CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1"), properties: [.write, .read], value: nil, permissions: [.writeable, .readable])
service.characteristics = [characteristic]

您正在尝试读取设置为“仅写”的特征,因此在尝试读取该特征时会出现错误。这是有道理的,但我如何使其可读写?此外,我将属性更改为.read和,将权限更改为.readable,并且它不会更改任何内容。您从何处打印错误?我刚刚创建了一个使用您的代码的测试应用程序,它运行良好。这是我的两个视图控制器-第一个是中央控制器,第二个是外围控制器错误来自
didiscovercharacteristics对于服务
功能,我将编辑问题以显示位置。我查看了您的测试应用程序,您使用了另一种搜索外围设备的方法(可能也是更好的方法),所以我复制了它,它解决了一些问题。连接后,中央计算机会运行两次
didDiscoveryCharacteristics for
函数,有时会出现错误,如果没有,则特征显示为零。然后它又运行了一次,并在for语句中崩溃,该语句说`NSArray元素与Swift数组元素类型不匹配。我在找到外围设备后结束了扫描,因此我决定尝试使用开关打开/关闭扫描,就像您所做的那样。这解决了这个问题,因此感谢您给出的示例。