0

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

打电话后

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

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

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

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

知道为什么吗?

我注意到的另一件事是,在测试了我用 LightBlue 反复解释的内容以查看我的应用程序在宣传什么之后,有时某些服务/特性似乎卡住了并​​且不会消失,我什至不得不恢复我的手机以摆脱它们一次。这是正常的吗?

非常感谢

4

1 回答 1

1

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

我尝试了 Swift 和 Objective C 代码。

CBUUID从 a 返回的确实CBMutableCharacteristic 响应UUIDString选择器,但显然您不会CBMutableCharacteristics从发现过程中得到。

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

这样,您可以将所需特征列表发送到discoverCharacteristics并编写更多“已定义”代码,而不必假设“未知”特征是标识符。

于 2014-09-08T00:33:54.503 回答