2015-10-13 62 views
0

我正在寫一個應用程序,與藍牙接口,並出於OO的原因,我需要能夠通知1許多對象時,藍牙事件發生。我有一個自定義的模型對象:KVO不工作的自定義NSObject子類的屬性

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++ 
     } 
    } 
    ... 
} 

除了我試圖與志願掛鉤控制器:我已經證實,計數,反覆遞增

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。

回答

0

確保使用dynamic關鍵字聲明count屬性。如果它不能解決您的問題,請檢查this

+0

哇!那麼,那是做到了。謝謝!我無法相信這種'動態'沒有出現在我的谷歌中進入KVO。直到現在,即使我已經運行了全面的教程,也還沒有完全掌握它。我不能將你的答案標記爲解決方案,但是,謝謝^。^ –

+0

接受我的答案將高度讚賞:)好運編碼,人:) –

相關問題