合并后台线程更新后,NSFetchedResultsController不会触发委托方法
我有一个NSFetchedResultsController和一些操作,通过NSOperationQueue在单独的线程上插入和更新托pipe对象。
FRC看起来像这样,请注意,我已将caching设置为零:
[NSFetchedResultsController deleteCacheWithName:nil]; NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
每个线程操作都有自己的托pipe对象上下文,并在每次保存更改时触发mergeChangesFromContextDidSaveNotification到主MOC。
我用来合并上下文的代码如下所示:
- (void)mergeContextChanges:(NSNotification *)notification { NSManagedObjectContext *context = [fetchedResultsController managedObjectContext]; if([NSThread isMainThread] == NO) { [self performSelectorOnMainThread:_cmd withObject:notification waitUntilDone:NO]; return; } NSSet *updated = [[notification userInfo] objectForKey:NSUpdatedObjectsKey]; for(NSManagedObject *thing in updated) { NSLog(@"Background thread updated %@", [thing description]); } for(NSManagedObject *thing in updated) { [[context objectWithID:[thing objectID]] willAccessValueForKey:nil]; } [context mergeChangesFromContextDidSaveNotification:notification]; }
我可以通过查看每次后台操作插入或更新数据的日志来确认,我的mergeContextChanges:方法正在用正确的插入/更新值调用。
问题是在合并插入正确触发FRC委托方法(例如controllerDidChangeContent :)时,合并更新不会指示FRC触发其委托方法。
奇怪的是,如果我使用主MOC在主线程上运行更新,我也可以确认FRC正确地启动它的委托。
当更新的MOC合并时,我怎样才能让FRC使用委托方法?
更多信息:看起来像使用除主要MOC以外的任何MOC,并尝试将更新合并到主MOC具有相同的结果; FRC拒绝注意到它。
天啊。
它看起来像从我的线程操作中访问主MOC(即使它是与我试图更新的数据无关的任务)导致这种奇怪的行为。
我希望这可以帮助其他任何人遇到这个问题。
- 迁移可以在没有多个数据模型版本的情况下完成。 欢呼?
- RestKit对象映射:使用setObjectMapping的困难:forResourcePathPattern:withFetchRequestBlock
- 重新添加xcdatamodel到生成设置
- 使用Objective Cjoincoredata
- date部分标题不起作用
- 有没有人有一个核心数据中的fetched属性的工作示例?
- 将managedObjectContext传递给UITabBarController的视图
- UITableView与NSFetchedResultsController不会第二次加载
- 核心数据的RestKit临时对象的最佳实践