Временно отключен NSArrayController filterPredicate или обратитесь в ManagedObjectContext? - PullRequest
0 голосов
/ 03 июня 2010

У меня есть NSArrayController, который связан с классом в моем контексте управляемых объектов. Во время выполнения NSArrayController может иметь несколько различных предикатов фильтра. Через определенные промежутки времени я хочу перебирать содержимое моего NSArrayController независимо от примененного к нему предиката фильтра.

Чтобы сделать это, я установил filterPredicate на nil, а затем восстановил его после итерации по моему массиву. Кажется, это работает, но мне интересно, если это лучший способ? Должен ли я вместо этого вручную опрашивать контекст управляемого объекта?

NSPredicate *predicate = nil;
predicate = [myArrayController filterPredicate];
[myArrayController setFilterPredicate:nil];
for(MyManagedObject *object in [myArrayController arrangedObjects]) {
    // ...
}
[myArrayController setFilterPredicate:predicate];

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

Вы можете извлечь весь контент из контроллера массива независимо от примененного предиката фильтра, используя селектор content:

[myArrayController content]

Вам вообще не нужно сбрасывать предикат фильтра.

0 голосов
/ 03 июня 2010

Если вас интересует только получение всех экземпляров Foo без фильтра, а затем программная итерация по ним, почему бы не использовать NSFetchRequest напрямую?

Достаточно просто использовать дескрипторы сортировки в вашем запросе на выборку, если вы запрашиваете -arrangedObjects вашего контроллера только для этого.

...