+(NSFetchRequest *)fetchRequestInContext: (NSString*) entityName : (NSPredicate *) predicate : (NSString*) sortKey : (BOOL) sortAscending;
+(NSFetchedResultsController *) searchControllerInContext: (NSString*) entityName : (NSPredicate *) predicate : (NSString*) sortKey : (BOOL) sortAscending
{
NSFetchRequest *request = [self fetchRequestInContext:entityName :predicate :sortKey :sortAscending];
NSFetchedResultsController * FRC=[[[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:[ThreadClass managedObjectContext] sectionNameKeyPath:Nil cacheName:Nil]autorelease];
NSLog(@"FRC : %@",FRC);
return FRC;
}
FetchController
と呼ばれ、私はNSFetchedResultsControllerを作成し、このコードでそれをperfomしたいとき、私はsearchControllerInContextを呼び出す:if (![[self ListController].FetchController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
問題があります私はいつも実行したいと思います。要求が変更されたときに取得します。簡単にしたいです。
[self ListController].FetchController.fetchRequest=[self FunctionTogetNewRequest];
しかし、[self ListController] .FetchController.fetchRequestは読み込み専用です..
私は実行したくないのでこれをしたいと思います。
つまり、ユーザーが検索ボックスに入れたレコードに基づいてレコードを提供するプログラムがある場合、検索ボックスの内容が変更されるたびに新しいコントローラを作成する必要がありますか?それは不思議です。私はNSFetchedResultsControllerを使用することの全体的なポイントは私たちがそれを行う必要はないと思った?
結果をキャッシュするとどうなりますか?結果をキャッシュしないとperformFetchをもう一度呼び出す必要がありますか? –
フェッチ要求を変更すると、キャッシュされた結果が無効になります。フェッチ要求を変更するたびに、結果セットを再フェッチする必要があります。 –
これがうまくいくかもしれませんが、Appleのドキュメントに書かれているものを考慮してください: '重要な このメソッド[NSFetchedResultsController initメソッド]を呼び出した後、fetchRequestを変更してはいけません。たとえば、述語やソート順序を変更してはいけません。 ' – fabb