私は非常に基本的で明白な答えがあるはずの問題に遭遇しています.Appleのドキュメントのいくつかと、ここでの回答とオンラインのチュートリアルを読みました。
「月」エンティティのリストを表示するテーブルビューがあります (アプリはコア データを使用します)。その親月に含まれるすべての日のリストを表示したい別のテーブルビューに続きます。したがって、「月」エンティティのリストの行をタップすると、理想的には、たとえば 1 月の日付のみが一覧表示されます。
月と日の両方のテーブルビューには、月のエントリと日のエントリをそれぞれ追加する通常のビュー コントローラ (テーブルビュー VC ではない) への別個のセグエがあります。
データはモデル化されているため、Month はターゲットとして Days との対多の関係 (daysInMonths) を持ち、逆は対 1 の関係 (parentMonth) になります。
月の属性は「月」と「年」です。日の属性は、「月」、「日」、および「年」です。
現在、モデル オブジェクトのすべての属性は文字列です (理想的ではありませんが、次の演習でこれを変更します)。
月と日のエントリを追加できます。削除できます。問題は、最初のテーブルビュー (月) の行をタップすると、毎日のエントリが表示され、まったくフィルタリングされないことです。
Days tableview .m ファイルでフェッチされた結果コントローラーを設定するときに、述語を使用して、特定の親月に一致する日のみをフィルター処理すると想定しています。
このテーブルビューでのフェッチ リクエストは Days オブジェクトです。述語を設定するときに、そのフェッチ メソッド内で Month オブジェクトをインスタンス化する必要がありますか?
データを正しく関連付けるために「parentMonth」関係を設定するだけで、テーブルビューに表示される追加の Model オブジェクトを作成したくありません。
リレーションシップの概念は理解していますが、実際にコードで設定する方法が少しわかりません。
このようなフィルターを設定するのに最適な場所はどこですか?
私はおそらく十分に明確ではないことを認識しているので、他の質問にはできる限り答えます.
この種の機能はどこでも使用されているため、基本的なものが欠けていることはわかっていますが、自分で読んでもまだ要点を理解できていません...
@implementation DaysCDTVC
- (void)setupFetchedResultsController
{
// 1 - Get Entity
NSString *entityName = @"Days";
NSLog(@"Setting up a Fetched Results Controller for the Entity named %@", entityName);
// 2 - Request
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];
// 3 - Filter
//request.predicate = [NSPredicate predicateWithFormat: ????????????????
// 4 - Sort
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"month"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]];
//5 - Fetch
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
[self performFetch];
}
「performFetch」メソッドは関連付けられたクラスにあります。これは基本的に、スタンフォードの iTunes レクチャーで Paul Hegarty が教えたことと同じです。