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

Posted

技术标签:

【中文标题】暂时禁用NSArrayController filterPredicate,还是咨询ManagedObjectContext?【英文标题】:Temporarily disabled NSArrayController filterPredicate, or consult 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];

【问题讨论】:

【参考方案1】:

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

[myArrayController content]

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于暂时禁用NSArrayController filterPredicate,还是咨询ManagedObjectContext?的主要内容,如果未能解决你的问题,请参考以下文章

NSArrayController 的“准备内容”设置已关闭:如何获取内容?

买币反人性而挖矿顺人性,炒币90%亏钱,而挖矿90%赚钱;FIL供不应求,买盘强盛,下跌是正常的暂时的,长期上涨是不可改变的趋势

如何暂时禁用滚动?

暂时禁用单个 Python 单元测试

暂时禁用第一次机会异常

暂时禁用 UISlider 交互