Наблюдение значения ключа с помощью NSArray - PullRequest
21 голосов
/ 13 августа 2010

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

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

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

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

1 Ответ

31 голосов
/ 13 августа 2010

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

...