2013-01-19 9 views

答えて

15

で所定の位置エンティティであろう、

  • にフェッチされたプロパティを "ユーザー"
  • と述語の目的地を設定する "ANY checkins.event == $ FETCH_SOURCE"

enter image description here

今、あなたは場所のため、ユーザーの配列を取得することができます

Place *place = ...; 
NSArray *users = [place valueForKey:@"users"]; 

このフェッチされたプロパティは、要求フェッチ以下に該当する:あなたが宣言すると

Place *place = ...; 
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY checkins.event == %@", place]; 
[request setPredicate:predicate]; 
NSArray *users = [context executeFetchRequest:request error:&error]; 

を動的プロパティとして取り出したプロパティusers

@interface Place (FetchedProperties) 
@property(nonatomic, retain) NSArray *users; 
@end 

@implementation Place (FetchedProperties) 
@dynamic users; 
@end 

、あなたは、プロパティの構文を使用して値を取り出すことができます

NSArray *users = place.users; 
// instead of: NSArray *users = [place valueForKey:@"users"]; 

しかし、あなたがフェッチされたプロパティを使用せずに、直接、同じ結果(セットなど)を取得することができますの点に注意してください。

Place *place = ...; 
NSSet *users = [place.checkins valueForKey:@"user"]; 
+0

Checkinのcreated_atプロパティに基づいてユーザーを並べ替える場合は、並べ替え記述子キーを設定する方法は? – Subhash

+0

@Subhash:フェッチされたプロパティにソート記述子を追加することはできないと思いますが、フェッチした後でユーザー配列をソートする必要があります。 - または、ソート記述子を追加できる通常のフェッチ要求を使用します。 –

+0

ご返信ありがとうございます。私は上記と同様のモデルを持ち、フェッチコントローラを使ってデータをフェッチします。ソートキーをcreated_atとして設定すると、「Exception = to-manyキーはここで許可されていません」というエラーが表示されます。これはFetchコントローラの制限ですか?上記の解決策(フェッチコントローラを使用せずに)は、この問題を解決する唯一の方法ですか? – Subhash

2

私はあなたを正しく理解したと思います。特定の場所でチェックインしたユーザーのリストが必要ですか?

あなたはそれとは逆です。 Userのうち少なくとも1つがCheckinで、特定の番号がPlaceのものをすべて取得します。

コアデータ用語では、このためにサブクエリが必要です。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(checkins, $CHECKIN, $CHECKIN.event == %@)[email protected] > 0", place]; 
request.predicate = predicate; 
/* and so on */ 

SUBQUERYについてのドキュメントはあまりありません。少しだけ、expressionForSubquery:usingIteratorVariable:predicate:の議論に書かれています。

そしてフェッチプロパティは、宛先エンティティユーザ及びチェックイン所定の場所に関連しているすべてのユーザーを取得プレイスのフェッチプロパティusersについて述語SUBQUERY(checkins, $CHECKIN, $CHECKIN.event == $FETCH_SOURCE)[email protected] > 0

関連する問題