1

У меня есть NSArrayController, связанный с изменяемым массивом в моем контроллере, который управляет массивом моих объектов модели. Контроллер массива связан с моим пользовательским интерфейсом. Это работает хорошо.Наблюдение за изменениями модели с помощью привязок Cocoa и NSArrayController

Теперь я пытаюсь наблюдать вручную, когда значение изменяется в моей модели в классе контроллера (в основном я отмечаю измененную модель как «needsToSave» для более поздней версии, но есть несколько других задач, которые у меня есть, когда меняется).

Я читал о KVO, но я не совсем уверен, что мне нужно наблюдать ... NSArrayController? Массив объектов? каждый объект модели сам? Путаница.

Любые указатели будут очень полезны. Заранее спасибо!

ответ

2

В вашем модуле добавить и удалить методы, которые вы должны начать и прекратить наблюдать за каждым элементом, чтобы узнать обо всем, что происходит. Это также поможет вам выполнить отмену. Если вам нужен пример кода, я знаю, что книга Hillegass охватывает его (по крайней мере, второе издание, еще проверили 3-е издание). Вы также можете найти образец кода для реализации отмены для справки.

+0

Так что в моем контроллере у меня было бы что-то вроде: '-addNewObject {MyObj * obj = ...; [obj addObsever: self ...]; [myArrayController addObject: obj]; 'Как это? – jbrennan

+0

Это, по сути, правильно, вам нужно начать наблюдение за каждым ключевым путем, которым вы хотите использовать 'addObserver: self forKeyPath: параметры aKeyPath: NSKeyValueObservingOptionOld context: NULL'. Поскольку вам может понадобиться наблюдать несколько путей ключа, вы можете захотеть начать и прекратить методы наблюдения. Не забудьте, если у вас есть (и вы должны) метод setArray: для перечисления всех элементов отдельно, чтобы остановить наблюдение за старыми элементами массива и начать с новых. BTW, если вы работаете на основе документа, вы можете проверить, не загрязнен ли документ, чтобы сохранить часть «needsToSave». – theMikeSwan

Смежные вопросы