2015-10-13 1 views
0

Я пишу приложение, которое взаимодействует с Bluetooth, и по причинам OO мне нужно иметь возможность уведомлять 1 обо всех объектах, когда происходят события Bluetooth. У меня есть пользовательский объект Model: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!") 
    } 
    ... 
} 

Я подтвердил, что счетчик инкрементируется неоднократно, даже после того как контроллер представления загружает и регистрирует в качестве наблюдателя. Я почти уверен, что никаких уведомлений нет, но я не знаю, почему. Нужно ли добавлять что-то, чтобы включить KVO в пользовательский NSObject? Я использую последние iOS9 и Swift2.

ответ

0

Удостоверьтесь, что свойство count указано ключевым словом dynamic. Если проблема не решена, проверьте this.

+0

Whoa! Ну, вот и все. Спасибо! Я не могу поверить, что этот «динамический» не появился в моих Google-играх в KVO. До сих пор я не узнал об этом даже при тщательном обучении, которое я выполнял. Я не могу пометить ваш ответ как решение, но спасибо.^ –

+0

Принимая мой ответ, мы будем очень благодарны :) Коды удачи, человек :) –

Смежные вопросы