背景
我有一个由两个存储组成的核心数据数据库(一个存储我的数据,一个存储用户数据),它们之间通过获取的属性链接。
假设我有两个实体,它们之间的关系是 0 到 1。 Card 0 ----> 1 CardStatus
1) Card,包含参考数据和一些属性(externalKey、word、description...)
Fetch Properties - userData (指向 CardStatus 并使用 externalKey 做 2 个实体之间的链接)
2) CardStatus,包含每张卡的状态。该实体存储在用户数据存储中。
在某些情况下,我需要根据卡片的状态来获取卡片(例如:检索所有标记为过期的卡片,检索所有标记为新的卡片等...)
问题
我应该编写什么样的谓词来根据 CardStatus 实体的值获取 Card 实体?
我尝试在谓词中直接使用我获取的属性 userData,但核心数据不允许这样做。
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'keypath userData not found in entity'
然后我尝试了一个子查询(见下文) - 仍然不起作用。有趣的是,当我直接在 NSArray 上进行过滤(而不是获取请求)时,它工作得很好。
示例 - 检索具有特定状态的卡:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(userData, $x, ($x.currentLevel == 0)).@count > 0)"];
示例 - 检索标记为新的卡片(即 CardStatus 中没有数据):
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(SELF, $x, $x.userData.@count == 0).@count > 0"];
有什么建议吗?