0

課題、質問、課題-質問の 3 つのテーブルがあります。

割り当てテーブルには、ID、タイトルなどの割り当てに関連する情報が含まれます。

質問テーブルには課題の質問が保持され、質問 ID、質問のタイトル、質問のテキストなどのプロパティがあります。

複数の割り当てが同じ質問を共有できるため、質問テーブルのエントリが重複しないようにするため、質問テーブルにはプロパティとして割り当て ID がありません。

割り当てと質問は、割り当て ID と質問 ID を持つ割り当て-質問という名前のテーブルを介して関連付けられます。

例: 課題 1 に ID 1、2、3 の 3 つの質問があるとします。

この場合、Questions テーブルと Assignment-Questions テーブルの両方に 3 つのエントリがあります。

次に、課題 2 には、ID 4、5、および 1 の 3 つの質問があります (課題 1 と同じ)。

この場合、質問テーブルには 5 つのエントリがあり (1 つの質問は課題 1 と 2 の両方で共通です)、課題-質問には 6 つのエントリがあります (課題 1 と 2 にそれぞれ 3 つ)。

このシナリオでは、課題 2 に関連するすべての質問を割り当て-質問テーブルに追加された順序で取得するフェッチ コントローラーを作成します。

結果がオーダーを維持することによって2つのテーブルの組み合わせである述語とソート記述子を記述する方法がよくわかりません。私はいくつかの順列と組み合わせを試しましたが、何もうまくいかないようです。提案を手伝ってください。

4

1 に答える 1

0

@MartinRはそれを正しく持っています。結合テーブルを操作します。いくつかのフィールド名などを推測しましたが、コードはもちろんテストされていませんが、次のように動作するはずです:

fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"AssignmentQuestion"];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"question.order" ascending:YES]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"assignment = %@", assignment];
fetchRequest.relationshipKeyPathsForPrefetching = @[@"question"];

次に、VC で AssignmentQuestion オブジェクトの FRC を操作できます。

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    Question* question = [[_fetchedResultsController objectAtIndexPath:indexPath] question];
    ...
}
于 2013-08-14T15:54:39.993 に答える