ios:CFUUIDRef的NSArray

时间:2012-10-23 07:44:57

标签: ios automatic-ref-counting core-bluetooth

我正在尝试使用CoreBluetooth的retrievePeripheral:

- (void)retrievePeripherals:(NSArray *)peripheralUUIDs;

文档说peripheralUUID应该是CFUUIDRef的NSArray。在Apple示例项目temperatureSensor中,它被称为:

[centralManager retrievePeripherals:[NSArray arrayWithObject:(id)uuid]];

(uuid是CFUUIDRef) 当我在XCode 4.5.1,IOS6中使用完全相同的代码时,我收到一个错误:

  

将C指针类型'CFUUIDRef'(又名'const struct __CFUUID *')转换为Objective-C指针类型'id'需要桥接转换

我会说(虽然我很不确定)它在TemperatureSensor中工作而不是在我的项目中的原因是因为TemperatureSensor似乎不使用ARC,而我的项目确实如此。

Xcode建议了两种解决问题的方法:添加__bridge或使用CFBridgingRelease().我尝试过这两种方法,我认为函数不起作用[Edit],因为委托方法didRetrievePeripheral:永远不会调用[/ Edit](我的理解是这些操作会将C样式的结构更改为Objective-C-objects,从而创建NSUUID,并且该方法不能使用它,但是,我真的不确定)

那我该怎么办?我一直在google上搜索使用ARC的retrievePeripherals的例子,但没有成功。

2 个答案:

答案 0 :(得分:2)

在温度传感器中更改此行并运行

LeDiscovery.m

 -(void) startScanningForUUIDString:(NSString *)uuidString
 {
      [centralManager scanForPeripheralsWithServices:nil options:0];
 }

更改单词nil并假设为0。

如果您想要更多检查link

我希望它对你有用。

答案 1 :(得分:1)

事实证明问题比这简单得多。我从TemperatureSensor复制/粘贴了一些代码,特别是DidRetrievePeripheral。但事实证明,此代码中存在错误(它是DidRetrievePeripheralS),因此委托方法永远不会被调用。我认为这个bug已经报道了。

感谢/抱歉