NSTreeController + Основные данные: СТОП КВО? - PullRequest
2 голосов
/ 15 августа 2011

Context

У меня очень нормальная настройка в моем приложении: NSOutlineView (поддерживаемый NSTreeController, привязанным к базовым данным) заполняет NSTableView (поддерживаемый NSArrayController, привязанным к базовым данным) на основе того, что пользовательвыбирает в схематическом виде.Оба контроллера (и их представления) связаны обычным образом ---> привязка contentSet к NSArrayController указывает на свойство NSSet объекта, представленного выбранной строкой в ​​outlineView.

Итак, предположим, что пользователь выбирает«Папка X» в схематичном виде.В «папке X» содержится 1200 элементов, каждый из которых поддерживается сущностью Core Data, а каждый представляет собой строку в tableView.

Проблема

Мое приложение необходимо изменитьсвойство каждого из этих 1200 объектов, поэтому у меня есть цикл, который делает именно это.Но КАЖДЫЙ раз, когда я получаю доступ к объекту и устанавливаю новое свойство, NSTreeController и NSArrayController запускают уведомление KVO с измененным объектом в качестве объекта уведомления.Это убийство.

Если ничего не выбрано в outlineView, цикл завершается более или менее мгновенно.Если выбрана «папка X», эти уведомления KVO замедляют процесс до ~ 8 секунд.

Что мне нужно

Способ, чтобы ОСТАНОВИТЬ контроллеры от запуска уведомлений KVO, или способОбойти эту проблему, чтобы обновление объектов не происходило медленнее, если они выбраны в NSController.

1 Ответ

2 голосов
/ 15 августа 2011

Вы можете использовать -setPrimitiveValue:forKey: метод NSManagedObject. Это позволит вам установить значение свойства без запуска наблюдателей KVO.

Обратите внимание, что в общем случае вы должны использовать динамически генерируемые средства доступа, а не использовать этот метод напрямую (например, setPrimitiveName: вместо setPrimitiveValue:newName forKey:@"name").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...