这是我的代码:
- (void)peripheralManager:(CBPeripheralManager *)peripheralManager central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic
{
[self.centralManager retrievePeripherals:@[central.UUID]];
}
我收到一个错误:
Collection element of type 'CFUUIDRef' (aka 'const struct __CFUUID *') is not an Objective-C object
我该怎么办?
最佳答案
问题:
编译器仅了解类型,而不了解运行时行为。它不知道-很有可能-CFUUIDRef
可以像任何普通的Objective-C对象一样使用(尽管它官方上没有免费的桥接Foundation类免费对象)。它只看到const struct __CFUUID
不是Objective-C类,因此无法使用。
解决方案:
I.我想这会起作用-只是尝试了一下,它的确起作用了,当使用CFUUID
打印时NSLog().
甚至有一个不错的描述,但是,没有记录。只需将其转换为id
,就像这样:
@[(__bridge id)central.UUID]
二。是的,您可以将其转换为字符串,但这也不会使编译器错误消失-您确实需要那种类型转换,因为编译器会针对不兼容的类型进行古怪:
CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault,@[central.UUID]);
NSString *uuidNSString = (__bridge NSString *)uuidString;
现在保证可以正常工作。
关于ios - CFUUID数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17728480/