我正在尝试使用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的例子,但没有成功。
答案 0 :(得分:2)
在温度传感器中更改此行并运行
LeDiscovery.m
-(void) startScanningForUUIDString:(NSString *)uuidString
{
[centralManager scanForPeripheralsWithServices:nil options:0];
}
更改单词nil
并假设为0。
如果您想要更多检查link。
我希望它对你有用。
答案 1 :(得分:1)
事实证明问题比这简单得多。我从TemperatureSensor复制/粘贴了一些代码,特别是DidRetrievePeripheral。但事实证明,此代码中存在错误(它是DidRetrievePeripheralS),因此委托方法永远不会被调用。我认为这个bug已经报道了。
感谢/抱歉