8

Xcodeデータモデル ユーザーの配列を表示するPlaceエンティティのフェッチ済みプロパティをどのように記述しますか?

4

2 に答える 2

16

チェックインが特定の場所に関連しているすべてのユーザーを取得するPlaceのフェッチされたプロパティusersの場合、

  • フェッチされたプロパティの宛先を「ユーザー」に
  • および「ANYcheckins.event==$FETCH_SOURCE」の述語

ここに画像の説明を入力してください

これで、場所のユーザーの配列を取得できます。

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"];
于 2013-01-19T09:03:21.953 に答える
2

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

次に、その逆を行います。特定のUserが少なくとも1つあるすべてのをフェッチします。CheckinPlace

Core-Dataの用語では、このためのサブクエリが必要になります。

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

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

そして、フェッチされたプロパティは、宛先エンティティUserと述語を持つPlaceエンティティにありますSUBQUERY(checkins, $CHECKIN, $CHECKIN.event == $FETCH_SOURCE).@count > 0

于 2013-01-19T09:01:36.793 に答える