Ios 未调用NSFetchedResultsController controllerDidChangeContent
当我的数据发生更改时,更新我的Ios 未调用NSFetchedResultsController controllerDidChangeContent,ios,core-data,nsfetchedresultscontroller,Ios,Core Data,Nsfetchedresultscontroller,当我的数据发生更改时,更新我的NSFetchedResultsController时遇到问题。我的简化模型是这样的 我有一个查询来列出PSPlayer的所有psarms,它的PSMetaData属性设置为YES NSPredicate *selected = [NSPredicate predicateWithFormat:@"player.metadata.selected == %@", @YES]; NSFetchRequest *request = [PSWeapon MR_reque
NSFetchedResultsController
时遇到问题。我的简化模型是这样的
我有一个查询来列出PSPlayer
的所有psarms
,它的PSMetaData
属性设置为YES
NSPredicate *selected = [NSPredicate predicateWithFormat:@"player.metadata.selected == %@", @YES];
NSFetchRequest *request = [PSWeapon MR_requestAllWithPredicate:selected];
request.sortDescriptors = @[];
NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:nil];
self.fetchedResultsController.delegate = self;
[self.fetchedResultsController performFetch:nil];
第一个查询工作正常,但在选择其他播放机时不会调用-[NSFetchedResultsControllerDelegate controllerDidChangeContent:
我甚至在选择了新玩家后发布了自己的通知,并再次调用[self.fetchedResultsController performFetch:nil]代码>发布时,但这也不起作用
我做错了什么
cheersfetchedResultsController将只跟踪作为底层获取请求主题的实体的更改—在您的情况下是pswearm
对象。对由关系链接的对象的更改将不会被检测到,即使它们会影响谓词的结果。这就是说,您的替代方法应该是有效的——您可以发布相关的代码吗?实际上它确实有效。选择新播放器时,我正在调用-[NSFetchedResultsController performFetch:
来“强制”更新,并依赖-[NSFetchedResultsController委派控制器IDChangeContent:
来更新UI,但在初始提取时不调用后者。因此,在调用performFetch
后,我只需刷新UI。另一种方法不是发布我自己的通知,而是让另一个NSFetchedResultsController
只查询所选播放器。当此fetchedResultController更改时,我可以重新获取我的武器fetchedResultController