ユーザーの配列を表示するプレースエンティティにフェッチされたプロパティを書き込むにはどうすればよいですか?コアデータ結合テーブル、多くのスルー、フェッチされたプロパティ述語があります
8
A
答えて
15
で所定の位置エンティティであろう、
- にフェッチされたプロパティを "ユーザー"
- と述語の目的地を設定する "ANY checkins.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"];
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
関連する問題
- 1. フェッチされたプロパティのための述語ビルダ?
- 2. コアデータ述語:UTI適合
- 3. フェッチ述語としての日付の範囲 - コアデータ間のNSDate述語
- 4. コアデータ - 述語
- 5. コアデータ:述語のオブジェクト
- 6. コアデータをフェッチしたプロパティ$ FETCHED_SOURCEがオブジェクトID
- 7. コアデータ述語1対多および多対1の問題
- 8. 多対多の結合テーブルに複数の列がありますか?
- 9. アクティブレコードには、多くのスルー、作成、削除の対称性があります。
- 10. 結合述語が無効です(SQL0338)
- 11. MySQLクエリのパフォーマンスヘルプ。同じテーブルの多くが結合されています
- 12. 返された場合のJava8述語
- 13. Swiftコアデータ述語IN句
- 14. Xcode 4.2.1コアデータモデルエディタを使用して、フェッチされたプロパティの述語をどのように更新しますか?
- 15. コアデータ述語が機能しない
- 16. 多対多結合に関連付けられたテーブルの子のサブセットのテーブルを結合します。
- 17. 多くの外部キーを持つSQLテーブルそれを指すテーブルがたくさんあります
- 18. 多対多の述語
- 19. 中間テーブルと多くの関係に多くのコアデータ(スウィフト2)
- 20. ロードされたxmlデータに多くの "スペース"があります
- 21. コアデータ - 述語を使用したより良い検索
- 22. xPathノードを選択するより多くの述語
- 23. プロパティ上の述語
- 24. プロローグで述語を結合する
- 25. Prolog。述語を結合する
- 26. 述語CoreDataを修正する方法チャットとメッセージの弱い関係のフェッチされたプロパティ?
- 27. あるテーブルを別のテーブルの多くの行と結合する
- 28. LINQクエリと述語の結合
- 29. 結合されたセットはすべての値を含む必要がありますが、より多く含むことがあります
- 30. Hibernate JPA ManyToManyアソシエーションで作成された結合テーブルがありません。
Checkinのcreated_atプロパティに基づいてユーザーを並べ替える場合は、並べ替え記述子キーを設定する方法は? – Subhash
@Subhash:フェッチされたプロパティにソート記述子を追加することはできないと思いますが、フェッチした後でユーザー配列をソートする必要があります。 - または、ソート記述子を追加できる通常のフェッチ要求を使用します。 –
ご返信ありがとうございます。私は上記と同様のモデルを持ち、フェッチコントローラを使ってデータをフェッチします。ソートキーをcreated_atとして設定すると、「Exception = to-manyキーはここで許可されていません」というエラーが表示されます。これはFetchコントローラの制限ですか?上記の解決策(フェッチコントローラを使用せずに)は、この問題を解決する唯一の方法ですか? – Subhash