【问题标题】:How to initialize a CBMutableCharacteristic with multiple CBCharacteristicProperties and Permissions如何使用多个 CBCharacteristicProperties 和权限初始化 CBMutableCharacteristic
【发布时间】:2013-08-09 11:07:05
【问题描述】:

我正在创建一个新的 CBMutableCharacteristic,用于我正在制作的蓝牙应用程序。我从教程中得到了一些代码,如下所示:

_customCharacteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];

_customCharacteristic 是我的 CBMutableCharacteristic。

但是,我想用其他属性初始化我的_customCharacteristic,例如CBCharacteristicPropertyReadCBCharacteristicPropertyWrite。权限也是如此:我也想给它CBAttributePermissionsWriteable

据此:http://developer.apple.com/library/ios/#documentation/CoreBluetooth/Reference/CBCharacteristic_Class/translated_content/CBCharacteristic.html#//apple_ref/doc/c_ref/CBCharacteristicProperties

还有这个:http://developer.apple.com/library/ios/#documentation/CoreBluetooth/Reference/CBMutableCharacteristic_Class/Reference/CBMutableCharacteristic.html#//apple_ref/doc/c_ref/CBAttributePermissions

我可以为每个特征同时拥有多个属性和权限。但是,我不知道如何以这种方式初始化我的 CBMutableCharacteristic。

【问题讨论】:

    标签: ios core-bluetooth


    【解决方案1】:

    它是一个枚举,它的不同值可以按位或运算,所以你可以一起使用特性属性和权限:

    CBMutableCharacteristic *_customCharacteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyNotify+CBCharacteristicPropertyRead
     value:nil permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];
    

    【讨论】:

    • 重要的是要注意,这只是因为值是双向互斥的,并且每个值只添加一次。使用按位或“|”操作更安全,也是普遍接受的解决方案。
    【解决方案2】:

    tdevoy 的答案是正确的,或者以下也是我的工作代码

    characteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID      properties:CBCharacteristicPropertyWriteWithoutResponse|CBCharacteristicPropertyRead  value:nil permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];
    

    【讨论】:

      【解决方案3】:

      当前的答案在当时是有效的,但已经过去八年了,现在 Apple 使用 OptionSet 表示 属性权限

      以下是用于初始化CBMutableCharacteristic 的现代、基于 Swift 的方法,并包含一个简短的 sn-p 示例,您可以在 Playground 中运行以进行验证。

      import CoreBluetooth
      
      let cbuuid = CBUUID()
      let characteristic = CBMutableCharacteristic(type: cbuuid,
                                                   properties: [.notify, .read],
                                                   value: nil,
                                                   permissions: [.readable, .writeable])
      // All print true
      print(characteristic.properties.contains(.read))
      print(characteristic.properties.contains(.notify))
      print(characteristic.permissions.contains(.readable))
      print(characteristic.permissions.contains(.writeable))
      

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2021-05-08
        • 1970-01-01
        • 2015-07-09
        • 2012-11-21
        相关资源
        最近更新 更多