合并后台线程更新后,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(即使它是与我试图更新的数据无关的任务)导致这种奇怪的行为。

我希望这可以帮助其他任何人遇到这个问题。