在Core Bluetooth Framework中创建Writable特性的问题

Sun*_*mar 4 bluetooth ios core-bluetooth swift

我是Core Bluetooth Framework的新手.我正在开发一个充当外围设备的应用程序.我需要应用程序通知特定值到订阅的中心,并且还通过连接的中心写出特征值.我在创建它时设置了特征值.问题是当我设置要通知或写入的特性属性时显示错误"具有缓存值的特征必须是只读的".有谁能够帮我 ?

 var charValue = characteristicDetail["value"] as String
 var charProperties:CBCharacteristicProperties = getProperty(characteristicDetail["properties"] as String )
 let data = charValue.dataUsingEncoding(NSUTF8StringEncoding)
 var characteristic = CBMutableCharacteristic(type: charId, properties: charProperties, value: data, permissions: CBAttributePermissions.Readable)



func getProperty(string:String) -> CBCharacteristicProperties
    {
    var propertyString:CBCharacteristicProperties?
    switch string{
    case "r","R":
        propertyString = CBCharacteristicProperties.Read
    case "w","W":
        propertyString = CBCharacteristicProperties.Write
    case "n","N":
        propertyString = CBCharacteristicProperties.Notify
    case "i","I":
        propertyString = CBCharacteristicProperties.Indicate
    case "rw","wr","WR","RW":
        propertyString = CBCharacteristicProperties.Read|CBCharacteristicProperties.Write
    case "rn","nr","NR","RN":
        propertyString = CBCharacteristicProperties.Read|CBCharacteristicProperties.Notify
    case "wn","nw","NW","WN":
        propertyString = CBCharacteristicProperties.Write|CBCharacteristicProperties.Notify
    default:
        propertyString = CBCharacteristicProperties.Read
    }
    return propertyString!

}
Run Code Online (Sandbox Code Playgroud)

Pau*_*w11 9

如果value在创建时指定了非nil ,CBMutableCharacteristic则它是"缓存特征",并且如错误消息所示,您不能在以后更改该值.

CBMutableCharacteristic init方法的文档-

value - 要缓存的特征值.如果为零,则该值为动态值,将根据需要进行请求.

指定nil创建时间CBMutableCharacteristic- 在didReceiveReadRequest CBPeripheralManagerDelegate方法中请求时提供值.

如果您有已订阅特征的中心,那么每当值发生变化时您也应该打电话updateValue给您CBPeripheralManager.

请务必阅读" 核心蓝牙编程指南"中的" 执行常见外设角色任务"一节