Я смотрел на SO примеры использования наблюдения значения ключа с помощью NSArray
(или NSMutableArray
) и, по-видимому, вам необходимо использовать NSArrayController
(что в отличие от KVO
Я не знаком с), но я не нашел конкретных примеров того, как это сделать. Кто-нибудь может объяснить с помощью некоторого примера кода?
Например, если у меня есть GameModel
, который представляет имена своих игроков с NSArray (playerNameArray)
из NSStrings
. Я хочу наблюдать за этими строками (контроллер представления наблюдает за данными модели), чтобы обновить различные вещи в представлении.
Как получить уведомление об изменении массива имен игроков?
РЕДАКТИРОВАТЬ : iOS SDK даже поддерживает NSArrayController
? Если нет, есть ли другой способ?
Вам не нужен NSArrayController, чтобы наблюдать изменения в NSArray
. Однако вы не можете непосредственно наблюдать эти изменения, т.е. вы не можете вызвать -addObserver:forKeyPath:options:context:
непосредственно на NSArray
. В вашем случае вы хотите вызвать его на вашей GameModel
с @"playerNameArray"
в качестве ключа.
Однако вы еще не закончили. Обычные автоматические уведомления KVO сработают, только если вы вызовете -setPlayerNameArray:
, тем самым заменив весь массив. Если вам нужны более детальные уведомления, то вам нужно использовать -willChange:valuesAtIndexes:forKey:
и -didChange:valuesAtIndexes:forKey:
всякий раз, когда вы вставляете, удаляете или заменяете элементы в этом массиве.
Это будет посылать уведомление всякий раз, когда содержимое массива изменяется. В зависимости от NSKeyValueObservingOptions
, которые вы используете при добавлении наблюдателя, вы также можете получать инкрементные изменения, которые делаются - классная функция, но в данном случае она может не понадобиться.
Примечание: NSArrayController не существует на iOS. Он является частью Cocoa Bindings, который в настоящее время существует только в AppKit на Mac OS X. К счастью, он вам не нужен.