gpt4 book ai didi

ios - FetchedResults Controller 过滤计算值

转载 作者:行者123 更新时间:2023-11-29 03:58:21 24 4
gpt4 key购买 nike

我有一个由 NSFetchedResultsController 管理的表格 View 。

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

为了提供进一步的上下文:我有一个名为“Task”的核心数据实体,以及一个名为“TaskActions”的一对多关系。

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

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

这是我尝试过的:

 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。

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

最佳答案

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

来自 Fetching Managed Objects 中的核心数据编程指南

You cannot fetch using a predicate based on transient properties (although you can use transient properties to filter in memory yourself). ... To summarize, though, if you execute a fetch directly, you should typically not add Objective-C-based predicates or sort descriptors to the fetch request. Instead you should apply these to the results of the fetch.

关于ios - FetchedResults Controller 过滤计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com