2016-04-02 2 views
2

Я хочу проверить, были ли элементы добавлены в массив в swift с помощью KVO, и я по существу копировал этот пример из документации Apple, но когда код работает, он делает не поймать, когда размер массива обновляется. Вот то, что я сейчас:Использование KVO для указания того, когда элементы добавлены в массив

class ShowDirectory: NSObject { 
    var shows = [Show]() 
    dynamic var showCount = Int() 
    func updateDate(x: Int) { 
     showCount = x 
    } 
} 

class MyObserver: NSObject { 
    var objectToObserve = ShowDirectory() 
    override init() { 
     super.init() 
     objectToObserve.addObserver(self, forKeyPath: "showCount", options: .New, context: &myContext) 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     if context == &myContext { 
      if let newValue = change?[NSKeyValueChangeNewKey] { 
       print("\(newValue) shows were added") 
      } 
     } else { 
      super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) 
     } 
    } 

    deinit { 
     objectToObserve.removeObserver(self, forKeyPath: "myDate", context: &myContext) 
    } 
} 

После того как я добавить шоу в массив, я поставил showCount, равное количеству элементов в массиве, однако, не печатает «были добавлены X-шоу» утешать , Моя функция viewDidLoad() просто вызывает функцию, которая добавляет элементы в массив, и ничего больше на данный момент.

+0

Я не могу воспроизвести эту проблему. Вот мой смысл (с детской площадки): https://gist.github.com/rnapier/f3354765347631b1208892fe30e0fd31 Он печатает «2 добавления были добавлены». Можете ли вы опубликовать свой точный код, демонстрирующий проблему? –

ответ

0

Вы, к сожалению, не может добавить в качестве наблюдателя к Int, так как он не подкласс NSObject

Смотрите Apple Docs и поиск «Key-Value Соблюдая»

Вы можете использовать ключ-значение наблюдений с классом Swift, если класс наследуется от класса NSObject.

В противном случае код котельной KVO выглядит хорошо для меня.

Если вы хотите получать уведомления при изменении содержимого вашего массива, вы можете попробовать то, что рекомендует @Paul Patterson и use a proxy object

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