我有一个用户实体和一个电子邮件实体。用户有很多电子邮件。如果我有User对象,我可以使用[用户电子邮件]访问该组电子邮件。但是,如何使用NSPredicate为用户检索所有电子邮件?假设没有反比关系。
答案 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"]
并获得一堆所有电子邮件。