Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 什么';有什么更好的方法可以与很多人建立深厚的关系?_Iphone_Core Data_Nspredicate - Fatal编程技术网

Iphone 什么';有什么更好的方法可以与很多人建立深厚的关系?

Iphone 什么';有什么更好的方法可以与很多人建立深厚的关系?,iphone,core-data,nspredicate,Iphone,Core Data,Nspredicate,我有三个实体:EntityA、EntityB和EntityC,它们与许多关系相关 有关详细信息,请参见架构: 为了获取依赖于EntityB.name的EntityA的所有实例,我使用如下谓词: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY EntityB.name like 'SomeName'"]; 获取所有依赖于EntityC.name的EntityA实例的谓词应该是什么? 我尝试了类似于@“ANY Ent

我有三个实体:EntityA、EntityB和EntityC,它们与许多关系相关

有关详细信息,请参见架构:

为了获取依赖于EntityB.name的EntityA的所有实例,我使用如下谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY EntityB.name like 'SomeName'"];
获取所有依赖于EntityC.name的EntityA实例的谓词应该是什么? 我尝试了类似于
@“ANY EntityB.entitiesC.name like'SomeName'”
的查询,但出现异常
“此处不允许使用多对多键”

致以最良好的祝愿


维克托

当我被以下决定阻止时:

首先,我得到满足条件EntityC.name等于'SomeName'的所有EntityC

NSPredicate *p = [NSPredicate predicateWithFormat:@"name like %@", @"SomeName];

然后我从上面的查询中得到一个EntityB数组

NSArray *parentBs = [res valueForKeyPath:@"@distinctUnionOfObjects.parent"];
然后获取满足条件EntityB.EntitiesC.name等于'SomeName'的EntityB数组:

NSExpression *leftExpression = [NSExpression expressionForEvaluatedObject];
NSExpression *rightExpression = [NSExpression expressionForConstantValue:parentBs];

NSPredicate *p = [NSComparisonPredicate predicateWithLeftExpression:leftExpression rightExpression: rightExpression modifier:NSDirectPredicateModifier type:NSInPredicateOperatorType options:0];
我对EntityA重复同样的话


此解决方案的有效性尚不确定,我仍然希望有更好的解决方案解决此问题。

我的最终解决方案是使用子查询

NSPredicate *p = [NSpredicate predicateWithFormat:@"(name like %@) AND (0 != SUBQUERY(entitiesB, $x, (0 != SUBQUERY($x.entitiesC, $y, $y.name like %@).@count)).@count)", nameA, nameC];

不幸的是,我无法在nsExpression对象上展开此查询。

这是否适用于Mac OS和iOS的SQLite存储?苹果文档(来自iOS 5.0库:核心数据编程指南>持久存储功能>获取谓词和排序描述符——对于Mac OS可能有所不同):“对于可用于SQLite存储的谓词,还有其他限制:您不必翻译“任意”将SQL查询转换为谓词。”
NSPredicate *p = [NSpredicate predicateWithFormat:@"(name like %@) AND (0 != SUBQUERY(entitiesB, $x, (0 != SUBQUERY($x.entitiesC, $y, $y.name like %@).@count)).@count)", nameA, nameC];