1

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

4

3 回答 3

1

应该有一个反比关系,否则程序会给你一个警告。您可以执行以下操作:

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

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

于 2012-09-28T19:13:10.960 回答
0

恢复反向关系。即使您不直接使用它们,Core Data 也希望它的内务处理需要反向关系。

一个针对 Email 实体的简单请求将是:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Email"];
[NSPredicate predicateWithFormat:@"user = %@", user];
NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];
于 2012-09-28T19:22:00.830 回答
0

你不需要谓词。你可以把你关心的所有用户都带走:

[users valueForKey:@"emails"]

并得到一堆所有的电子邮件。

于 2012-09-28T22:28:40.267 回答