我在 Swift :
中写了以下class
import UIKit
import CoreBluetooth
class vaBean: CBCentralManager, CBCentralManagerDelegate {
func centralManagerDidUpdateState(central: CBCentralManager!) {
println("didUpdateState")
switch (central.state) {
case .PoweredOff:
println("hardware is powered off")
case .PoweredOn:
println("hardware is powered on and ready")
case .Resetting:
println("hardware is resetting")
case .Unauthorized:
println("state is unauthorized")
case .Unknown:
println("state is unknown");
case .Unsupported:
println("hardware is unsupported on this platform");
}
}
}
然后我使用以下代码在我的主ViewController
中创建一个实例:
import UIKit
import CoreBluetooth
class ViewController: UIViewController {
override func viewDidLoad() {
println("bluetoothTest v1.00")
super.viewDidLoad()
var myBean: vaBean!
var myBeanMgr = vaBean(delegate: myBean, queue: nil)
}
override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()}
}
代码编译正常但函数centralManagerDidUpdateState
从未被调用过,我不确定原因。
答案 0 :(得分:1)
考虑以下几点:
var myBean: vaBean!
var myBeanMgr = vaBean(delegate: myBean, queue: nil)
之后,myBean
是什么?它没有!您已创建变量并声明其类型,但您从未为其分配任何对象。然后,您创建myBeanMgr
,其委托为myBean
,即为零。你有一个带有nil委托的对象。没有人可以收到代表留言。
此外,viewDidLoad
然后结束,包括myBeanMgr
在内的所有局部变量立即被销毁。所以现在你甚至不再拥有myBeanMgr
了。你有没有。没有CBCentralManager。没有CBCentralManagerDelegate。什么都没有。
因此,您需要学习内存管理,以便了解事情的原因和方式,并且您需要学习Swift的基础知识,以便了解如何实例化类。您的代码清楚地表明您不了解其中任何一项。它们非常基础,所以不要再做了。