我是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!
}
2 回答
如果在创建
CBMutableCharacteristic
时指定了非零value
,那么它是'cached characteristic',并且如错误消息所示,您以后无法更改该值 .从
CBMutableCharacteristic
init
方法的文档 -创建
CBMutableCharacteristic
时指定nil
- 在didReceiveReadRequest
CBPeripheralManagerDelegate
方法中请求时提供值 .如果您有已订阅特征的中心,那么每当值发生变化时,您也应该在
CBPeripheralManager
上调用updateValue
.请务必阅读Core Bluetooth Programming Guide中执行常见外设角色任务一节
我找到了一个坚实的帖子中,在BLE方面包含了大量用于不同任务的优秀片段:
创建服务:
创造特色:
为服务添加特征:
将服务添加到外围设备管理器:
Source