KVO 不适用于自定义 NSObject 子类的属性

KVO not working for attribute of custom NSObject subclass

我正在编写一个与蓝牙接口的应用程序,出于面向对象的原因,我需要能够在蓝牙事件发生时通知多个对象。我有一个自定义模型对象:

class BluetoothModel: NSObject, CBCentralManagerDelegate {
    var cBCentralManager: CBCentralManager!
    var peripherals = [CBPeripheral]()
    var count = 0

    // MARK: - Singleton Definition

    static let instance = BluetoothModel()
    private override init() {
        super.init()
        cBCentralManager = CBCentralManager(delegate: self, queue: dispatch_get_global_queue(QOS_CLASS_UTILITY, 0))
    }

    // MARK: -  CBCentralManagerDelegate

    func centralManagerDidUpdateState(central: CBCentralManager) {
        cBCentralManager.scanForPeripheralsWithServices(nil, options: nil)
    }

    func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
        if !peripherals.contains(peripheral) {
            peripherals.append(peripheral)
            count++
        }
    }
    ...
}

以及我正在尝试连接 KVO 的控制器:

class MasterViewController: UITableViewController, CBCentralManagerDelegate {
    ...
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        BluetoothModel.instance.addObserver(self, forKeyPath: "count", options: .New, context: nil)
    }
    ...
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        print("Change!")
    }
    ...
}

我已经确认计数正在重复递增,即使在视图控制器加载并注册为观察者之后也是如此。我很确定没有触发任何通知,但我不知道为什么。我需要添加一些东西来在自定义 NSObject 中启用 KVO 吗?我正在使用最新的 iOS9 和 Swift2.

确保 count 属性 是使用 dynamic 关键字声明的。如果它不能解决您的问题,请查看 this