Это довольно плотный способ сказать "не добавляйте наблюдателя к самому набору, добавьте наблюдателя к классу, который содержит набор":
[myObjWithASetAsIvar addObserver:self
forKeyPath:@"nameOfIvarHoldingTheSet"
options:NSKeyValueObservingOptionNew
context:nil];
Один хитрый момент заключается в том, что вам нужно обернуть все свои обращения к набору для того, чтобы отправлять соответствующие уведомления. В классе, содержащем множество:
[self willChangeValueForKey:@"nameOfIvarHoldingTheSet"];
// Do something with the set
[self didChangeValueForKey:@"nameOfIvarHoldingTheSet"];
Существует также два метода уведомления специально для наборов: willChangeValueForKey:withSetMutation:usingObjects:
и didChangeValueForKey:withSetMutation:usingObjects:
; Вы можете обнаружить, что они работают лучше для вас, чем общие методы «изменения значения».
Из всего сказанного, я полагаю, что решение, которое вы упомянули в первом абзаце, и , изложенное Питером Хоси в вопросе, связанном с Гиришем, вероятно, является наилучшим путем.