Подтвердить что ты не робот

Наблюдение за ключевым значением с помощью NSArray

Я посмотрел на SO для примеров использования Key Value Observing с помощью NSArray (или NSMutableArray) и, видимо, вам нужно использовать NSArrayController (что в отличие от KVO, с которым я не знаком), но я не нашел конкретных примеров того, как это сделать. Может ли кто-нибудь объяснить пример кода?

Например, если у меня есть GameModel, который представляет имена своих игроков с NSArray (playerNameArray) of NSStrings. Я хочу наблюдать эти строки (контроллер просмотра наблюдает данные модели), чтобы обновлять различные вещи в представлении.

Как получить уведомление о том, что массив имен игрока изменился?

EDIT: поддерживает ли SDK iOS NSArrayController? Если нет, есть ли другой способ?

4b9b3361

Ответ 1

Вам не нужен 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. К счастью, вам это не нужно.