gpt4 book ai didi

ios - 从 CBCentralManagerDelegate 回调以在 IOS8 上检索 CBPeripheral

转载 作者:搜寻专家 更新时间:2023-10-30 22:10:02 26 4
gpt4 key购买 nike

我有一个管理 BTLE 通信的 BluetoothManager 类。我可以扫描并连接到 CBPeripheral 并发现服务或特征。我有来自 CBCentralManagerDelegate 和 CBPeripheralDelegate 的良好回调

当我连接到 CBPeripheral 时,我将 UUIDString 保存在 CoreData 中,以便在我重新启动应用程序时检索该外围设备。

这是我在重新启动应用程序时检索外围设备的 Swift 代码:

func retrievePeripheralsWithIdentifiers(identifiers: [AnyObject]!){
let data = self.centralManager.retrievePeripheralsWithIdentifiers(identifiers)

println("Data retrieved: \(data)")

for peripheral in data as [CBPeripheral] {

println("Peripheral : \(peripheral)")
peripheral.delegate = self
centralManager.connectPeripheral(peripheral, options: nil)
}
}

这是我得到的:

Data retrieved: [<CBPeripheral: 0x1669fcd0, identifier = XXXXX, name = Peripheral1, state = disconnected>]
Peripheral : <CBPeripheral: 0x1669fcd0, identifier = XXXXX, name = Peripheral1, state = disconnected>

我可以毫无问题地找到我的外围设备之一。但是当我调用“centralManager.connectPeripheral(peripheral, options:nil)”这一行时,我没有任何反应。

这些方法

func centralManager(central: CBCentralManager!, didRetrievePeripherals peripherals: [AnyObject]!)
func centralManager(central: CBCentralManager!, didConnectPeripheral peripheral: CBPeripheral!)
func centralManager(central: CBCentralManager!, didFailToConnectPeripheral peripheral: CBPeripheral!, error: NSError!)

没有回电让我知道出了什么问题。所以我可以找到好的外围设备,但无法连接到它。

但是,当我扫描时,我有相同的代码连接到一些外围设备,而且它可以工作;我自己的 CBCentralManager 有一个很好的委托(delegate)和我的外围设备。

我做错了什么?

我在 Xcode-Beta5 上使用 iPod-Touch iOS8-Beta5。

谢谢,

编辑

好吧,那更奇怪

我在 iOS7 和 Objective-C 上尝试使用我的旧应用程序中的以下代码,我在连接时保存了 UUIDString,并尝试检索外围设备。它运作良好:NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if ([defaults objectForKey:@"UUIDString"]) {
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:[defaults objectForKey:@"UUIDString"]];
NSArray * data = [self.centralManager retrievePeripheralsWithIdentifiers:@[uuid]];

if ( [data count] > 0 ){
self.currentPeripheral = [data objectAtIndex:0];
[self.currentPeripheral setDelegate:self];

[self.centralManager connectPeripheral:self.currentPeripheral options:nil];
}
} else {

NSLog(@"Scanning started");
/*...*/
}

这与我在 iOS8 和 Swift 上的新应用程序中的代码相同:

    let userDefaults = NSUserDefaults.standardUserDefaults()

if userDefaults.objectForKey("UUIDString") != nil {

let uuid = NSUUID(UUIDString: userDefaults.objectForKey("UUIDString") as String)
let data = self.centralManager.retrievePeripheralsWithIdentifiers([uuid]) as [CBPeripheral]

if data.count > 0 {

self.currentPeripheral = data[0]

println("Current peripheral \(self.currentPeripheral)")
self.currentPeripheral!.delegate = self
self.centralManager.connectPeripheral(self.currentPeripheral!, options: nil)
}
} else {

println("Start Scanning")
/*...*/
}

我在 iPod Touch iOS7 上试用了我的旧应用程序,它运行良好。我在 iPod Touch iOS8 上试用了我的旧应用程序,它也运行良好。我在 iPod Touch iOS8 上试用我的新应用程序,但它不起作用。

我没有发现这两个代码之间有任何区别。我可以扫描、发现和连接外围设备,但连接到检索到的外围设备似乎无法在 iOS8 和 Swift 上运行。

最佳答案

在您的原始示例中,您似乎没有保存 CBPeripheral 的本地副本。

来自CBCentralManager Class Reference - connectPeripheral :

Pending connection attempts are also canceled automatically when peripheral is deallocated.

关于ios - 从 CBCentralManagerDelegate 回调以在 IOS8 上检索 CBPeripheral,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25240895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com