NSPredicate以获取多对多关系中的所有对象

时间:2012-09-28 19:10:20

标签: iphone nspredicate

我有一个用户实体和一个电子邮件实体。用户有很多电子邮件。如果我有User对象,我可以使用[用户电子邮件]访问该组电子邮件。但是,如何使用NSPredicate为用户检索所有电子邮件?假设没有反比关系。

3 个答案:

答案 0 :(得分:1)

应该存在反比关系,否则程序会给你一个警告。你可以这样做:

NSPredicate *predicate=[NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"user" rightExpression:[NSExpression expressionForConstantValue:yourUser] modifier:NSDirectPredicateModifier type:NSEqualsToPredicateOperatorType options:0];

请记住,如果您已拥有该用户,则只需从该用户对象获取电子邮件即可。一对多关系在此用户对象中表示为NSSet,您可以使用它来访问其中的所有电子邮件,或将该组排序为数组。如果需要使用某种NSFetchResultsController,请使用fetch。

答案 1 :(得分:0)

恢复反向关系。即使您不直接使用Core Data,Core Data也需要反向关系。

对电子邮件实体的简单请求将是:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Email"];
[NSPredicate predicateWithFormat:@"user = %@", user];
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];

答案 2 :(得分:0)

您不需要谓词。你可以带走你关心的所有用户并做:

[users valueForKey:@"emails"]

并获得一堆所有电子邮件。