0

我有一个由 NSFetchedResultsController 管理的 tableview。

我的问题是我正在尝试根据计算值过滤数据,该计算值需要查看核心数据实体上的相关值。

进一步说明:我有一个名为“Task”的核心数据实体,以及一个名为“TaskActions”的一对多关系。

我想通过查看操作并使用一些自定义逻辑来对任务表视图进行排序。

问题是我真的不知道如何最好地实现这一点。

这是我尝试过的

 NSFetchRequest *requestForAll = [[NSFetchRequest alloc] initWithEntityName:@"Task"];
 NSPredicate *actionPredicate = [NSPredicate predicateWithFormat:@"taskActionPerformed == %@",@YES];
 requestForAll.predicate = actionPredicate;
 [self setFetchedResultsController:[[NSFetchedResultsController alloc] initWithFetchRequest:requestForAll managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil]];

我可以通过将属性“taskActionPerformed”放在实体上并覆盖 getter 值来完成此“过滤”工作,如下所示:

 - (NSNumber*)taskActionPerformed
{
    for (TaskActions *action in self.actions)
    {
        //Perform Logic
        return @YES;
    } 
    return @NO;
} 

但是,我读过不鼓励,甚至不推荐重写 KVO 方法(就像我正在使用 getter 一样)。

此外,上述解决方案仅在我保留数据之前有效。保存数据后,不调用 taskActionPerformed 并且不加载 fetchedresultscontroller。

我真的很想知道解决这个一般问题的最佳方法。

4

1 回答 1

1

最佳实践是在内存中过滤。

来自获取托管对象中的核心数据编程指南

您不能使用基于瞬态属性的谓词进行获取(尽管您可以使用瞬态属性自己在内存中进行过滤)。...总而言之,如果您直接执行 fetch,则通常不应将基于 Objective-C 的谓词或排序描述符添加到 fetch 请求中。相反,您应该将这些应用于获取的结果。

于 2013-04-24T23:22:21.217 回答