Aud*_*ble 8 iphone objective-c ipad core-bluetooth ios7
我有一个问题是将我的CoreBluetooth代码从iOS 6更新到iOS 7.我可以扫描外围设备并建立连接,但是,我无法使用iOS 7中提供的新CoreBluetooth方法重新连接外围设备.这里是一个看看我是如何尝试完成重新连接的:
- (void)retrievePeripheral:(NSString *)uuidString
{
NSUUID *nsUUID = [[NSUUID UUID] initWithUUIDString:uuidString];
if(nsUUID)
{
NSArray *peripheralArray = [centralManager retrievePeripheralsWithIdentifiers:@[nsUUID]];
// Check for known Peripherals
if([peripheralArray count] > 0)
{
for(CBPeripheral *peripheral in peripheralArray)
{
NSLog(@"Connecting to Peripheral - %@", peripheral);
[self connectPeripheral:peripheral];
}
}
// There are no known Peripherals so we check for connected Peripherals if any
else
{
CBUUID *cbUUID = [CBUUID UUIDWithNSUUID:nsUUID];
NSArray *connectedPeripheralArray = [centralManager retrieveConnectedPeripheralsWithServices:@[cbUUID]];
// If there are connected Peripherals
if([connectedPeripheralArray count] > 0)
{
for(CBPeripheral *peripheral in connectedPeripheralArray)
{
NSLog(@"Connecting to Peripheral - %@", peripheral);
[self connectPeripheral:peripheral];
}
}
// Else there are no available Peripherals
else
{
// No Dice!
NSLog(@"There are no available Peripherals");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中uuidString是保存的外围设备UUID.
我总是得到没有可用外围设备的NSLog声明.我想我错过了一些非常明显的东西,有人可以指出我正确的方向.
此外,我已经阅读了有关CoreBluetooth的iOS 7更新问题的其他帖子,并尝试重置BLE设备和iOS设备,但无济于事.
提前致谢!听得见
事实证明,我的错误是NSString在将消息发送到retrievePeripheral方法之前将外围设备的标识符转换为格式.
这是不正确的方式:
NSString *uuidString = [NSString stringWithFormat:@"%@", CFUUIDCreateString(NULL, (__bridge CFUUIDRef)([peripheral identifier]))];
Run Code Online (Sandbox Code Playgroud)
这是正确的方法(在我的场景中有效):
NSString *uuidString = [NSString stringWithFormat:@"%@", [[peripheral identifier] UUIDString]];
Run Code Online (Sandbox Code Playgroud)
根据Apple文档,NSUUID该类与CoreFoundation没有免费桥接,CFUUIDRef如下所述:
注意:
NSUUID该类没有与CoreFoundation的免费桥接CFUUIDRef.如果需要,使用UUID字符串在CFUUID和之间进行转换NSUUID.两个NSUUID对象不能保证可以通过指针值进行比较(按原样CFUUIDRef); 用于isEqual:比较两个NSUUID实例.
对于那些喜欢直观表示我在这里意味着什么的人来说,这是一个例子:)
控制台中打印的外围信息:
<CBPeripheral: 0x14699430 identifier = DD2468AB-1865-B926-7FA4-AE3755D479D8, Name = "IDYNAMO EMV-A27F", state = disconnected>
Run Code Online (Sandbox Code Playgroud)
将Peripheral的标识符转换为NSStringyield 的错误方法是:
1865B926-7FA4-AE37-55D4-79D800000000
Run Code Online (Sandbox Code Playgroud)
将外围设备的标识符转换为NSString产量的正确方法:
DD2468AB-1865-B926-7FA4-AE3755D479D8
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助某人完成他们的BLE旅程,如果我错了,我可以随时纠正我,因为我还在学习这些东西.
谢谢!
听得见
| 归档时间: |
|
| 查看次数: |
9146 次 |
| 最近记录: |