暂时禁用NSArrayController filterPredicate,还是咨询ManagedObjectContext?

时间:2010-06-03 12:41:40

标签: cocoa core-data nsarraycontroller

我有一个NSArrayController,它绑定到我的托管对象上下文中的一个类。在运行时,NSArrayController可以应用许多不同的过滤谓词。在某些时间间隔,我想迭代我的NSArrayController的内容,无论应用于它的过滤器谓词。

为此,我将filterPredicate设置为nil,然后在遍历我的数组后恢复它。这似乎有效,但我想知道这是否是最好的做法?我应该手动轮询我的托管对象上下文吗?

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

2 个答案:

答案 0 :(得分:4)

您可以使用content选择器从数组控制器中检索所有内容,与所应用的过滤谓词无关:

[myArrayController content]

您根本不需要重置过滤谓词。

答案 1 :(得分:0)

如果您只想让所有Foo实例都没有过滤器,那么以编程方式迭代它们,为什么不直接use an NSFetchRequest呢?

如果您要求控制器的-arrangedObjects,那么在获取请求中使用排序描述符就很容易了。