Параметры из наблюдаемых значений: ForKeyPath: ofObject: change: context: - PullRequest
13 голосов
/ 26 октября 2009

Мне было интересно, что вернут параметры из этого метода.

- (void) observeValueForKeyPath:(NSString *)keyPath
                       ofObject:(id)object
                         change:(NSDictionary *)change
                        context:(void *)context;

В документации написано

keyPath Путь ключа относительно объекта к измененному значению.

object Исходный объект ключевого пути keyPath.

change Словарь, который описывает изменения, внесенные в значение свойства по ключевому пути keyPath относительно объекта.

context Значение, которое было предоставлено, когда получатель был зарегистрирован на получить наблюдение значения ключа уведомления.

Не могли бы вы объяснить эти параметры для меня, поскольку я нахожу документацию немного трудной для понимания.

1 Ответ

13 голосов
/ 26 октября 2009

Когда вы регистрировались для уведомлений KVO, вы указали путь к addObserver:. Параметр keypath - это просто возвращаемое вами значение. Параметр объекта - это объект, которому вы отправили сообщение addObserver:. Их можно использовать для различения уведомлений KVO о различных траекториях / объектах (например, если вы наблюдаете несколько значений).

change - это словарь, содержащий информацию о характере изменения значения. Он может содержать новое значение или старое значение, или, для многих, он может содержать измененные индексы. Его содержание лучше описано в Руководство по программированию KVO в разделе Получение уведомления об изменении .

Когда вы регистрируетесь для уведомления, вы также можете указать значение контекста. Последнее значение - это просто возвращаемое вам значение. Если у вас нет какой-либо специфической для контекста информации, передайте nil на addObserver:.

Для хорошего обсуждения некоторых недостатков системы KVO (и некоторых вспомогательных классов для их устранения), см. Отличное сообщение Майка Эша в блоге

...