К сожалению, классы NSArray совместимы с KVO. Они соответствуют KVC, но вы не можете наблюдать их непосредственно, как вы пытаетесь сделать здесь. Самый простой способ получить эту функциональность - использовать NSArrayController. Контроллер NSArray совместим с KVO и предупредит вас, когда элементы будут добавлены или удалены. В вашем примере ваш наблюдатель будет уведомлен, если вы на самом деле изменили сам массив. Например, если вы сделали что-то вроде этого:
[moe setSomeArray:[NSMutableArray array]];
Что, вероятно, совсем не то, что вы хотели :). Кроме того, NSDictionary на самом деле совместим с KVO, так что вы можете использовать его, если захотите. Или вы можете написать подкласс обертки NSMutableArray, который просто создает реальный непостоянный массив в качестве своего резервного хранилища, но просто пересылает ему все сообщения, кроме addObject
и removeObject
, которые вы можете переопределить для запуска уведомлений.