Ios 核心蓝牙-修改具有新特性或更少特性的服务

Ios 核心蓝牙-修改具有新特性或更少特性的服务,ios,swift,core-bluetooth,Ios,Swift,Core Bluetooth,我有一个应用程序使用核心蓝牙,我希望外围设备管理器在其中添加或删除服务的特征。我可以添加新的特性,方法与我最初设置它们的方法相同: serialService.characteristics.append(newCharacteristic) 但是如果我想删除一个现有的特征呢?我可以得到一系列现有的特征。我这样初始化:let newCharacteristic=CBMutableCharacteristic(类型:cbuuid,属性:[.read,.notify],值:nil,权限:.reada

我有一个应用程序使用
核心蓝牙
,我希望外围设备管理器在其中添加或删除服务的特征。我可以添加新的特性,方法与我最初设置它们的方法相同:

serialService.characteristics.append(newCharacteristic)

但是如果我想删除一个现有的特征呢?我可以得到一系列现有的特征。我这样初始化:
let newCharacteristic=CBMutableCharacteristic(类型:cbuuid,属性:[.read,.notify],值:nil,权限:.readable)
。似乎我应该能够循环遍历characteristics数组并查询
type
以查找我要删除的属性,但我不认为
type
是我可以查询的属性。有什么地方可以去吗?或者我需要从头开始构建服务而不是修改它


在修改服务后,我如何将更改通知中心?我是否删除服务,然后添加它?

我不确定为什么
CBMutableCharacteristic
的第一个参数用一个名为“type”的参数初始化。这有点令人困惑(即使在ObjC中)。所需属性的名称为
uuid

您需要删除该服务并重新添加它

将服务添加到外设的本地数据库后,核心蓝牙将缓存该服务,您无法再对其进行更改


一旦删除并重新添加该服务,将修改GATT数据库并触发向中央数据库的通知。蓝牙处理这一问题的标准方式是使用服务更改特性(0x2a05),但如果您在苹果设备之间进行通话,苹果可能会以专有方式进行处理。如果这两个都是iOS设备,您应该期望central的CBPeripheraldegreement会收到
外围设备(uu:didModifyServices:)
(可能两次,一次用于删除,一次用于添加)。

谢谢。这正是我所期望的(除了
uuid
部分,谢谢)。我已经确认了您在从头开始重建服务时预测的行为,这应该相当于删除一个项目。