現在、アプリには次のデータモデルがあります。レコードは、タイムスタンプ、タイプ、名前を持つ抽象エンティティです。Recordをサブクラス化する3種類のエンティティがあります。NSFetchedResultsControllersはRecordオブジェクトをプルし、テーブルビューでクラス別に並べ替えます。
Event1 has record as abstract parent, there will be 10000 such events
Event2 has record as abstract parent, there will be 100 such events
Event3 has record as abstract parent, there will be 100 such events
イベント1はシステムによって生成され、イベント2と3はユーザーによって作成されます。
このシステムの目的は、すべてのデータが必要なときにデータを表示しやすくすることです。
ただし、部分的なデータ(ユーザーが作成したイベント)のみを表示し、ユーザーがそれらを編集できるようにしたいという問題が発生しています。
現在のデータモデルがユーザーイベントのみをフィルタリングして表示する効果的な方法であるかどうかを迷っています(コアデータは、システムで生成されたイベントからほんの一握りのイベントを分離する必要があります)。システムで生成されたイベントを別のエンティティにする必要がありますか?このようなことを心配する必要がありますか、それともコアデータが十分に最適化されているので、このようなことは問題ではありませんか?
以下は、私にこの質問をさせたNSFetchedResultsControllerです。
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
//system-generated events do not have type defined, while user events do have a type
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF.type > %0"];
[fetchRequest setPredicate:predicate];
//^What are the performnance implications of the above predicate?
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];