这是我的代码:

- (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/

10-11 08:57