Уведомление об изменении для себя в подклассе NSmutableDictionary

Я разделил NSMutableDictioary на подклассы, следуя в основном этой замечательной записи в блоге.

Теперь в этом подклассе сам словарь подписывается на все свои значения, чтобы обнаруживать любые изменения. Этот бит работает просто отлично, и изменения значений наблюдаются внутри этого подкласса.

Однако затем изменения значений должны передаваться наблюдателям словаря, т. е. наблюдатели словаря (подкласса) должны получать уведомления об изменении словаря.

За исключением того, что я не могу понять, как вызвать это уведомление KVO - используя

[self didChangeValueForKey:@"self"];

похоже, не имеет никакого эффекта, поэтому я застрял.

Как экземпляр подкласса NSMutableDictionary может инициировать уведомление об изменении для себя?


person ATV    schedule 12.05.2014    source источник
comment
Что вы имеете в виду наблюдатели за словарем? Словарь нельзя наблюдать напрямую. Наблюдение за ключом и значением — это наблюдение за изменением свойств объекта. Вы не можете наблюдать сам объект как таковой. Если словарь служит свойством другого объекта, вы должны наблюдать за этим объектом на предмет изменений в этом свойстве, но уведомления об изменениях будут выдаваться только тогда, когда свойство изменяется через какой-либо метод этого объекта.   -  person Ken Thomases    schedule 13.05.2014
comment
Чтобы создать подкласс словаря, вы должны добавить в свой класс методы addObject и removeObject. Вы можете уведомить там наблюдателей, запустив уведомление KVO, уведомив делегата или отправив уведомление NSNotification.   -  person Logan    schedule 13.05.2014
comment
Или вы можете использовать KVO для резервного словаря.   -  person Logan    schedule 13.05.2014
comment
@Logan Сделал все это, как уже описано в вопросе. Это не проблема. Отправка уведомления KVO для самого экземпляра подкласса не работает.   -  person ATV    schedule 13.05.2014
comment
@KenThomases Хм .. Хорошо, я понял твою точку зрения.   -  person ATV    schedule 13.05.2014


Ответы (1)


Как уже намекнул Кен, KVO позволяет вам наблюдать за свойствами, а не за объектом как таковым!

В Руководстве по программированию для наблюдения за ключом-значением говорится, что

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

Другими словами: за собой нельзя наблюдать.

person cacau    schedule 13.05.2014