1

我正在尝试使用 CoreBluetooth 的 retrievePeripheral :

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

文档说 peripheralUUIDs 应该是 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 建议了 2 种解决问题的方法:添加__bridge或使用CFBridgingRelease().我都尝试过,但我的印象是该功能不起作用 [Edit] 因为委托方法 didRetrievePeripheral: never 被调用 [/Edit] (我的理解是这些操作会将 C 风格的结构更改为目标 C 对象,从而创建 a NSUUID,并且该方法不能使用它,但是,我真的不确定)

所以我该怎么做 ?我一直在谷歌上搜索使用 ARC 的retrievePeripherals 示例,但没有成功。

4

2 回答 2

2

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

LeDiscovery.m

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

更改单词nil并假设为 0。

如果你想要更多检查这个链接

我希望它对你有用。

于 2012-10-23T09:24:52.820 回答
1

事实证明问题比这简单得多。我从 TemperatureSensor 复制/粘贴了一些代码,特别是 DidRetrievePeripheral。但事实证明,这段代码有一个错误(它是 DidRetrievePeripheralS),所以委托方法永远不会被调用。我认为该错误已被报告。

谢谢/抱歉

于 2012-10-23T08:42:03.467 回答