NSFetchedResultsController:更改谓词不起作用?

Ton*_*Liu 35 iphone core-data uitableview nspredicate nsfetchedresultscontroller

我正在一个屏幕上编写一个带有两个表的应用程序.左表是文件夹列表,右表显示文件列表.点击左侧的行时,右侧表格将显示属于该文件夹的文件.

我正在使用Core Data进行存储.当文件夹的选择发生变化时,右表NSFetchedResultsController的fetch谓词将改变并执行新的提取,然后重新加载表数据.我使用了以下代码片段:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"list = %@",self.list];
[fetchedResultsController.fetchRequest setPredicate:predicate];
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {   
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}
[table reloadData];
Run Code Online (Sandbox Code Playgroud)

但是获取结果仍然相同.我在获取之前和之后都有NSLog'ed"谓词",并且它们对于更新的信息是正确的.获取结果与初始提取保持一致(加载视图时).

我不太熟悉Core Data获取对象的方式(是否有缓存系统?),但我之前用单表视图完成了类似的事情(更改谓词,重新获取数据和刷新表),一切都进行了好.

如果有人能给我一个提示,我将非常感激.

提前致谢.

dea*_*ane 56

我几乎完全有这个问题,直到我在iphone孵化器的最近一篇博文中找到了提示

NSFetchedResultsController正在缓存第一个结果.(你可能在initWithFetchRequest中设置了一些东西:managedObjectContext:sectionNameKeyPath:cacheName)

我猜你的代码(比如我的)是CoreData示例的派生,所以假设它是@"Root",在你更改谓词之前,做一个

[NSFetchedResultsController deleteCacheWithName:@"Root"];  
Run Code Online (Sandbox Code Playgroud)