Промяна на известието за себе си в подклас 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