暂时禁用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供不应求,买盘强盛,下跌是正常的暂时的,长期上涨是不可改变的趋势