2012-01-09 6 views
1

コアデータを使用したアプリケーションがあります(正常に終了しました)。オブジェクトグラフには、多対多から数万の子を持つルートノードがいくつかあります。ユーザー入力に基づいて、自分のアプリケーションの実行中に、私は(擬似コード)次の操作を行いますフェッチをコアデータで事前キャッシュするか?

Find the user selected root node, 
Then fetch all its children, in ascending alphabetic order based on a property. 

ここのトリックは、このデータが定数であるということです。私のコアデータストアは読み取り専用です。

このフェッチを実行するのは非常に時間がかかります。これらの結果をプリキャッシュして、フェッチとストアを完全に避けることができますか?取得した結果は、UITableViewを満たすために使用されます。ユーザーがそのテーブルビューのセルを選択すると、コアデータストアのより深いデータにドリルダウンします。そのデータはプレキャッシュする必要はありません。

答えて

0

このコードは、Core Data Programmingガイド ")、プリフェッチの作成方法を示しています。

NSManagedObjectContext *context = /* get the context */; 
NSEntityDescription *employeeEntity = [NSEntityDescription 
entityForName:@"Employee" inManagedObjectContext:context]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:employeeEntity]; 
[request setRelationshipKeyPathsForPrefetching: 
[NSArray arrayWithObject:@"department"]]; 

また、実際のフェッチからリトライされる内容に制限を設けます。それがパフォーマンスに役立ちます。

1

テーブルビューでNSFe​​tchedResultsControllerを使用している場合は、cacheNameを設定できます。 NSFetchRequestにbatchSizeを設定して、結果をまとめることができます。また、ソートをコアデータモデルのインデックスとして設定するようにしてください。

+0

NSFetchedResultsControllerについて聞いたこともありませんでした。ありがとう! – Nektarios

関連する問題