NSPredicate 在多对多关系中
Posted
技术标签:
【中文标题】NSPredicate 在多对多关系中【英文标题】:NSPredicate in many to many relation ship 【发布时间】:2012-10-10 23:15:54 【问题描述】:我有以下实体关系A > B,好吗? 现在,在应用程序的生命周期中,我有两个 A 类型的对象,我想知道包含这些对象的 B 的所有对象...
我尝试在 B 实体上使用 ...ANY aRelationWithA.att == objectA1.att...,但是,另一个对象呢...?我找到了一个 SUBQUERIES 解决方案,但结果相同,因为使用 ...SUBQUERY(aRelationWithA, $object, $object.att == objectA1.att)...,但同样,另一个对象呢...?
我需要在这些关系 A > B 中包含那些 A 对象的 B 对象,问候!
【问题讨论】:
SUBQUERY(aRelationWithA, $object, $object.att==objectA1.att && $object.att==objectA2.att)
不工作吗?
感谢您的回答,但它不起作用!
【参考方案1】:
我暂时使用了两个 NSPredicates 来验证该条件...
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"B"];
propertyRequest.predicate = [NSPredicate predicateWithFormat:@"ANY aRelationWithA.att == %@", objectA1.att];
NSError *error;
NSArray *collection1 = [context executeFetchRequest:request error:&error];
NSArray *collection2 = [collection1 filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY aRelationWithA.att == %@", objectA2.att]];
if (collection2.count) NSLog(@"There are some objects with that condition");
感谢您的回复或参考,以了解有关此主题的更多信息!
【讨论】:
【参考方案2】:这很简单:
NSFetchRequest *r = [NSFetchRequest fetchRequestWithEntityName:@"B"];
[r setPredicate:[NSPredicate predicateWithFormat:@"ANY relationshipToA = %@ OR ANY relationshipToA = %@", objectA1, objectA2]];
【讨论】:
@specktro 您需要在问题中包含更多信息。请准确地描述您要完成的工作,因为您已经得到了几个本应有效但显然无效的答案。向我们展示您在做什么,以及您希望它做什么。 嗨,戴夫,没有其他方法可以解释我的问题,我有这种关系 A > B... 在应用程序生命的某些部分,我得到了两个 A 类型的对象我想知道在某些 NSManagedObjectContext 中通过 NSFetchRequest 上的 NSPredicate 包含它们的对象 B。我已经探索了这里提供的解决方案,但没有一个答案能解决我的问题,我的解决方案得到了正确的结果,但对我来说效率不高。【参考方案3】:尝试使用这个谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY aRelationWithA in %@", [NSArray arrayWithObjects:objB1, objB2, nil];
【讨论】:
我更新了我的答案。我从谓词中删除了“.attr” 您的解决方案没有失败,但没有提供正确的结果,谢谢!以上是关于NSPredicate 在多对多关系中的主要内容,如果未能解决你的问题,请参考以下文章