0

我用Swiftclass编写了以下内容:

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使用以下代码在我的 main 中创建一个实例:

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从未被调用,我不知道为什么。

4

1 回答 1

1

考虑以下几行:

var myBean: vaBean!
var myBeanMgr = vaBean(delegate: myBean, queue: nil)

之后,是什么myBean?它是零!您已经创建了一个变量并声明了它的类型,但您从未为它分配任何对象。所以你然后创建myBeanMgr它的委托myBean,它是 nil。您有一个带有 nil 委托的对象。没有一个家可以接收代表消息。

此外,viewDidLoad然后结束,包括在内的所有局部变量myBeanMgr都被立即销毁。所以现在你甚至没有myBeanMgr更多了。你什么都没有。没有 CBCentralManager。没有 CBCentralManagerDelegate。没有什么。

因此,您需要学习内存管理以便了解事物为何以及如何持续存在,并且您需要学习 Swift 的基础知识以便了解如何实例化一个类。您的代码清楚地表明您不了解其中任何一个。它们是非常基本的,所以在你这样做之前不要再进一步了。

于 2014-10-31T15:39:36.377 回答