1

User エンティティと Email エンティティがあります。ユーザーは多数の電子メールを持っています。User オブジェクトがあれば、[user email] を使用して一連のメールにアクセスできます。しかし、NSPredicate を使用してユーザーのすべてのメールを取得するにはどうすればよいでしょうか? 逆の関係はないと仮定します。

4

3 に答える 3

1

逆の関係があるはずです。そうでない場合、プログラムは警告を出します。次のようなことができます:

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

すでにユーザーを持っている場合は、ユーザー オブジェクトからメールを取得できることに注意してください。このユーザー オブジェクトでは、1 対多の関係が NSSet として表されます。これを使用して、そこからすべてのメールにアクセスしたり、セットを配列に並べ替えたりできます。何らかの NSFetchResultsController を使用する必要がある場合は、フェッチを使用してください。

于 2012-09-28T19:13:10.960 に答える
0

述語は必要ありません。気になるすべてのユーザーを取り上げて、次のことを行うことができます。

[users valueForKey:@"emails"]

そして、すべての電子メールの山を取得します。

于 2012-09-28T22:28:40.267 に答える
0

逆の関係を復元します。Core Data は、直接使用しなくても、ハウスキーピングのために逆の関係を必要とします。

電子メール エンティティに対する単純な要求は次のようになります。

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