无法让Core Bluetooth在Swift iOS操作系统中工作
问题描述:
我是swift的新手。我没能获得一个回调centralManagerDidUpdateState :: W /操场以下(即:我想初始化会回调到centralManagerDidUpdateState):无法让Core Bluetooth在Swift iOS操作系统中工作
import CoreBluetooth
class BTDiscovery:NSObject,
CBCentralManagerDelegate {
func centralManagerDidUpdateState(central: CBCentralManager!) {
println("here")
}
}
var bt = BTDiscovery()
是核心蓝牙在iOS版雨燕操场支持? 我试过这个OSX操场和IOBluetooth。这也没有奏效。我究竟做错了什么?
谢谢。
答
我认为你运行的是操场本质上是同步的,而蓝牙发现是异步的。为了让它工作,你需要一些事情添加到您的操场允许异步操作:
import XCPlayground
XCPSetExecutionShouldContinueIndefinitely(continueIndefinitely: true)
还要注意,由于iOS的操场上的模拟器上运行,我不一定会想到CB在那里工作所有。
您还有更多的根本性问题,因为您没有做任何事情来实际触发发现。您需要创建的CBCentralManager
一个实例,并用它来驱动的发现过程:
import Cocoa
import XCPlayground
import CoreBluetooth
class BTDiscovery:NSObject, CBCentralManagerDelegate {
func centralManagerDidUpdateState(central: CBCentralManager!) {
println("here")
}
}
var bt = BTDiscovery()
var central = CBCentralManager(delegate: bt, queue: dispatch_get_main_queue())
XCPSetExecutionShouldContinueIndefinitely(continueIndefinitely: true)
答
您只能在实际的iOS设备上使用蓝牙核心;它在模拟器中不受支持,并且通过扩展,它在Playground中不受支持,因为它也在Mac上执行,而不是在iOS设备上执行。
非常感谢。对你的评论唯一的修正 - 没有发现,因为我想看看是否初始化(var bt = BTDiscovery()得到了一个DidUpdateState。当它没有,我意识到有东西无法正常工作。在OSX上使用IOBluetooth,我现在再试一次,我同意你的观点是:模拟器/没有核心蓝牙支持,再次感谢你, – user1255603
didUpdateState不会在你的例子中被调用,因为没有CBCentralManager,没有什么可以调用的它(除了异步问题) –