我有一个NSArrayController,它绑定到我的托管对象上下文中的一个类。在运行时,NSArrayController可以应用许多不同的过滤谓词。在某些时间间隔,我想迭代我的NSArrayController的内容,无论应用于它的过滤器谓词。
为此,我将filterPredicate设置为nil,然后在遍历我的数组后恢复它。这似乎有效,但我想知道这是否是最好的做法?我应该手动轮询我的托管对象上下文吗?
NSPredicate *predicate = nil;
predicate = [myArrayController filterPredicate];
[myArrayController setFilterPredicate:nil];
for(MyManagedObject *object in [myArrayController arrangedObjects]) {
// ...
}
[myArrayController setFilterPredicate:predicate];
答案 0 :(得分:4)
您可以使用content
选择器从数组控制器中检索所有内容,与所应用的过滤谓词无关:
[myArrayController content]
您根本不需要重置过滤谓词。
答案 1 :(得分:0)
如果您只想让所有Foo实例都没有过滤器,那么以编程方式迭代它们,为什么不直接use an NSFetchRequest呢?
如果您要求控制器的-arrangedObjects,那么在获取请求中使用排序描述符就很容易了。