CBService / CBCharacteristic UUIDString返回nil

时间:2014-09-07 08:08:32

标签: ios8 uuid core-bluetooth cbperipheral

我有一个iOS应用程序,当它第一次与我的OSX应用程序通话时生成一个新的UUID,然后存储,这样我可以为不同的设备提供不同的特征标识符。

致电后

peripheral.discoverCharacteristics([], forService: service as CBService)

在OSX应用程序的“didDiscoverServices”方法中,在“didDiscoverCharacteristicsForService”中我这样做是为了试图找出新设备的UUID是什么,以便我检查他们之前是否已经谈过,如果没有,我会存储它:

for characteristic in service.characteristics {
    println("\(characteristic.UUIDString)")
}

问题是它打印nil,如果我使用characteristic.UUID,它会给我“Unknown(< 46c35c38 c4994106 b6d351c9 8d900368>)”这不是我想要处理的格式。

知道为什么吗?

我注意到的另一件事是,在测试了我用LightBlue反复解释的内容,看看我的应用程序在做什么广告,有时候某些服务/特性似乎卡住而且不会消失,我已经甚至不得不恢复我的手机,以摆脱他们一次。这是正常的吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

似乎CBUUID的文档不正确。虽然它引用了UUIDString方法,但正如您在评论中指出的那样,这会产生一个无法识别的选择器异常。

我尝试了Swift和Objective C代码。

CBUUID 返回的CBMutableCharacteristic确实会回复UUIDString选择器,但显然您不会{{1}来自发现过程。

作为设计说明,您的方法可能不是最有效的。拥有包含标识符(例如CBMutableCharacteristics)的已知特征可能会更好,然后您可以使用特征本身的内容而不是特征的标识符来确定这是否是新设备或不

通过这种方式,您可以将所需特征的列表发送到identifierForVendor并写下更多"已定义的"代码,而不是必须假设"未知"特征是标识符。