核心数据:在给定的 'Rows' 集合之前获取 'Rows'

Core Data: Fetching 'Rows' Before a Given Set of 'Rows'

我有一个 NSFetchedResultsController,它为我提供了符合特定条件的 'transaction'-esque 对象的集合——例如,销售额超过 100 美元。每个交易都有一个唯一的整数标识符,对应于交易的相对时间(交易 23 在交易 24 之前)。我在 UITableView 控制器中显示结果没有问题。我还想显示在每次超过 100 美元的销售额之前发生的交易,即:

交易 - 93 美元(id = 1)

交易 - 101 美元(id = 2)

交易 - 12 美元(id = 13)

交易 - 243 美元(id = 14) 等等

然后在 TableView 中显示此结果列表。两笔超过 100 美元的交易不可能接连发生,因此无需担心重复输入。有什么办法吗?我在 SQL 中搜索如何执行此操作以获得灵感,但只有在给定 individual 结果行之前立即获得 'rows' 的答案,不是一组。

有什么想法吗?

您可以通过两次提取和一次排序操作来完成此操作(除了提取所有事务并在内存中进行过滤)。

首先获取所有超过 100 美元的交易。然后提取 ids 并获取相应的先前交易。合并和排序。

// first fetch with this predicate
NSPredicate(format:"amount > 100")

// get all previous ids
let previousIDs = result.map { [=10=].id - 1 }

// fetch the other records with this predicate
NSPredicate(format:"id in %@", previousIDs)

// merge & sort
let finalResult = (result + result2).sort { [=10=].id < .id }