sho*_*sho 2 iphone core-data ios
抱歉,如果这是重复的,20 分钟的搜索没有产生这种确切的情况或解决方案。
我有一个包含三个类XClass、YClass、 和的核心数据堆栈ZClass。XClass与 有一对多的关系YClass。YClass与 有一对多的关系ZClass。
使用 的实例NSFetchedResultsController,我试图获取XClass至少 1YClass至少有 1 的所有实例ZClass。
我的谓词定义如下:
// ...stuff
NSFetchRequest * fetchRequest = [NSFetchRequest new];
NSEntityDescription * entity = [NSEntityDescription entityForName:NSStringFromClass([XClass class])
inManagedObjectContext:managedObjectContext];
fetchRequest.entity = entity;
fetchRequest.predicate =
[NSPredicate predicateWithFormat:@"0 < SUBQUERY(yObjects, $y, $y.zObjects.@count > 0).@count"];
// ..instantiate NSFetchedResultsController and perform fetch
Run Code Online (Sandbox Code Playgroud)
这会导致消息出现致命异常: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Keypath containing KVC aggregate where there shouldn't be one; failed to handle $y.zObjects.@count'
在其他地方,我已经成功地YObject使用谓词获取了实例[NSPredicate predicateWithFormat:@"zObjects.@count > 0"];
有人可以指出我做错了什么吗?非常感谢。
当您在 SUBQUERY 的谓词字符串中使用集合运算符时,似乎 NSPredicate 对象会很猛烈。您似乎也无法对子查询谓词中的集合进行操作。也就是说,除非变量在谓词中表示一个集合。
坏的: SUBQUERY(yObjects, $y, $y.zObjects == NIL) > 0
好的: SUBQUERY(yObjects, $y, SUBQUERY($y.zObjects, $z, $z == NIL) > 0) > 0
以下表达式将所有非 nil 对象添加到 SUBQUERY 返回的过滤集合中。换句话说,返回的集合将包含 XClass 的所有实例以及 ZClass 的实例化。
[NSPredicate predicateWithFormat:@"yObjects.@count > 0 AND (SUBQUERY(yObjects, $y, (SUBQUERY($y.zObjects, $z, $z != NIL).@count > 0)).count > 0)"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1607 次 |
| 最近记录: |