Ios8 CBService/cbid字符串返回nil

Ios8 CBService/cbid字符串返回nil,ios8,uuid,core-bluetooth,cbperipheral,Ios8,Uuid,Core Bluetooth,Cbperipheral,我有一个iOS应用程序,当它第一次与我的OSX应用程序对话时,它会生成一个新的UUID,然后被存储,这样我就可以为不同的设备拥有不同的特征标识符 打完电话 peripheral.discoverCharacteristics([], forService: service as CBService) 在OSX应用程序中的“didDiscoverServices”方法中,在“didDiscoverCharacteristicsForService”中,我这样做是为了尝试找出新设备的UUID是什么

我有一个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()”,这不是我想要处理的格式

知道为什么吗

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


非常感谢,
CBUUID
的文档似乎不正确。尽管它引用了
uuistring
方法,但正如您在注释中指出的,这会导致无法识别的选择器异常

我尝试了快速和客观的C代码

CBMutableCharacteristic
返回的
CBUUID
会对
uuiString
选择器做出响应,但显然您不会从发现过程中获得
CBMutableCharacteristics

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


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

如果要打印某些内容,您应该使用
characteristic.UUID.UUIDString
我已经尝试过了,但是UUID中没有UUIString。UUID只有description/getMirror()/map(),description为我提供了与普通UUID相同的输出。当我按照你说的做的时候,Xcode给了我“‘CFUUID!’没有名为“UUIString”的成员它看起来像一个Swift问题-一个
CBUUID
肯定有一个
UUIString
方法,但是
CBCharacteristic
UUID
属性在文档中列为Objective-C属性。也许你需要先通过显式强制转换来检索它。我使用了一个游乐场来创建一个CFMutableCharacteristic,我完全可以访问
UUID.UUIDString
——但是
CBMutableCharacteristic
的文档中包含了Swift和Obj-C的
UUID
。我没有代码来给我一个Swift
CBCharacteristic
quickly这就是我今天下午所做的,我在外围设备上生成了一个新的供应商UUID并发送给中央设备,而不是让中央设备以后依靠检索到的特征来识别返回的外围设备。