【问题标题】:Temporarily disabled NSArrayController filterPredicate, or consult ManagedObjectContext?暂时禁用NSArrayController filterPredicate,还是咨询ManagedObjectContext?
【发布时间】:2010-06-03 12:41:40
【问题描述】:

我有一个 NSArrayController,它绑定到我的托管对象上下文中的一个类。在运行时,NSArrayController 可以应用许多不同的过滤谓词。在特定的时间间隔,我想遍历我的 NSArrayController 的内容,而不考虑应用到它的过滤谓词。

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

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

【问题讨论】:

    标签: cocoa core-data nsarraycontroller


    【解决方案1】:

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

    [myArrayController content]
    

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

    【讨论】:

      【解决方案2】:

      如果您只对获取所有没有过滤器的 Foo 实例感兴趣,然后以编程方式遍历它们,为什么不直接 use an NSFetchRequest 呢?

      如果您仅为此请求控制器的 -arrangedObjects,则在您的 fetch 请求中使用排序描述符很容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-09
        • 1970-01-01
        • 2012-12-25
        • 2014-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多