例子中,我NSFetchedResultsController叫在ListController稱爲FetchController爲什麼我們無法在NSFetchedResultsController中更改FetchRequest?
+(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;
}
看代碼,我打電話searchControllerInContext時,我想使NSFetchedResultsController,然後用這個代碼perfom它:
if (![[self ListController].FetchController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
問題我不想總是在請求發生變化時執行提取操作,我想讓它變得容易
[self ListController].FetchController.fetchRequest=[self FunctionTogetNewRequest];
但[自我ListController] .FetchController.fetchRequest是隻讀..
我想這樣做,因爲我不想perfomFetch一次又一次..我可以這樣做嗎?
我的意思是,如果我有一個程序根據用戶放入搜索框給出記錄,每當搜索框內容發生變化時,是否應該創建一個新的控制器?這很奇怪。我認爲使用NSFetchedResultsController的重點是,我們不必這樣做?
如果我緩存結果會發生什麼?如果我不緩存結果,是否需要再次調用performFetch? –
修改提取請求將使您的緩存結果無效。無論何時修改提取請求,您都應該重新提取您的結果集。 –
儘管這可能有效,但請考慮Apple在其文檔中寫入的內容:重要 在調用此方法[NSFetchedResultsController init方法]後,您不得修改fetchRequest。例如,你不能改變它的謂詞或排序順序。' – fabb