2013-11-28 1 views
1

Я использую какао-связывания для связывания NSTableView с Core Data как следующийЧто такое autoPreparesContent и автоматическиRearrangesObjects NSArrayController для?

_arrayController = [[MyArrayController alloc] init]; 
[_arrayController setEntityName:@"User"]; 
[_arrayController setManagedObjectContext:self.managedObjectContext]; 
[_arrayController setUsesLazyFetching:NO]; 

[self.tableView bind:NSContentBinding toObject:self.arrayController withKeyPath:@"arrangedObjects" options:nil]; 

[_arrayController fetch:nil]; 

и все, кажется, работает хорошо.

Но одна вещь, которую я не понимаю, - это эффект от automaticallyPreparesContent и automaticallyRearrangesObjects свойств NSArrayController. Согласно документации, оба по умолчанию равны NO, и я тоже их не изменил. Doc говорит

Если флаг ДА и контекст управляемого объекта установлен, исходное содержание извлекается из контекста управляемого объекта с использованием текущей выборки предиката. Контроллер также регистрируется как наблюдатель в контексте управляемого объекта. Затем он отслеживает вставки и удаления своего объекта с помощью уведомлений контекста и, при необходимости, обновляет его массив содержимого.

и я думаю, что это означает, что если флаг НЕТ, массив содержимого не обновляется вновь вставленными объектами в контекст управляемого объекта. Но он обновляется, когда я вставляю новый управляемый объект в контекст управляемого объекта. Что я неправильно понимаю?

И, о automaticallyRearrangesObjectsDoc говорит

Устанавливает, будет ли автоматически перестраивает его содержимое приемника, чтобы соответствовать текущей сортировке дескрипторов и фильтр предикаты.

Это означает, что, если флаг НЕТ, содержимое не перестраивается, даже если дескрипторы сортировки контроллера массива или предикат фильтра изменены. Но это! Когда я изменяю предикат фильтра или дескрипторы сортировки, строки в представлении таблицы, привязанные к контроллеру массива, переупорядочиваются.

Я совершенно смущен тем, чего не знаю или неправильно понимаю поведение NSArrayController.

ответ

2

«autoPreparesContent» определяет, будет ли начальная выборка заполнять массивController в базе данных CoreData автоматически или если вам нужно сделать это самостоятельно.

Вы можете отключить его, если вы хотите выполнить специальную выборку или выполнить некоторую дополнительную настройку в своем коде до первоначальной выборки.

«automaticRearrangesObjects» определяет, будет ли arrayController повторно сортироваться при изменении одного из значений в ваших объектах, а не будет ли он повторно сортироваться при изменении сортировки или фильтров. Например, если вы занимаетесь сортировкой по «заголовку» и вы изменяете заголовок объекта, вам нужно вручную указать, что arrayController обновит себя или произойдет автоматически.

Вы можете отключить этот последний, если у вас есть тысячи строк, потому что на самом деле довольно медленно настраивать KVO на тоннах предметов.

+0

Если я отключу «Подготовить контент», мне нужно обязательно написать код или я могу использовать сборку интерфейса для извлечения данных? (В моем случае NSArrayController привязан к NSComboBoxCell) – aneuryzm