暂时禁用NSArrayController的filterPredicate,或者咨询ManagedObjectContext?

ndg*_*ndg 0 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];
Run Code Online (Sandbox Code Playgroud)

小智 5

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

[myArrayController content]
Run Code Online (Sandbox Code Playgroud)

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