Ios 带有didChangeObject的NSFetchedResultsController在tableview中显示单元格的速度较慢

Ios 带有didChangeObject的NSFetchedResultsController在tableview中显示单元格的速度较慢,ios,uitableview,core-data,nsfetchedresultscontroller,nsmanagedobjectcontext,Ios,Uitableview,Core Data,Nsfetchedresultscontroller,Nsmanagedobjectcontext,在所有数据下载并插入coreData后,我使用NSFetchedResultsControllerDelegate显示单元格。 我使用下面的代码来了解何时发生了修改 [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshDatas:) name:NSManagedObjectContextDidSaveNotification object:nil]; 然后,调用此方法 - (void)r

在所有数据下载并插入coreData后,我使用NSFetchedResultsControllerDelegate显示单元格。 我使用下面的代码来了解何时发生了修改

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshDatas:) name:NSManagedObjectContextDidSaveNotification object:nil];
然后,调用此方法

- (void)refreshDatas:(NSNotification *)notification
{
    [[self.fetchedResultsController managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
}
但是,我有一个问题,在代理NSFetchedResultsControllerDelegate的InsertRowatinIndexPath的第一次调用和UITableView中插入的单元格的显示之间有5到10秒的时间,我不知道为什么


感谢您的帮助

如果您使用的是后台线程,并且在那里触发了通知,则需要在主线程中“重新发布”通知,如:

- (void)refreshDatas:(NSNotification*)notification
{
  if ([notification object] == [self managedObjectContext]) return;

  if (![NSThread isMainThread]) {
      [self performSelectorOnMainThread:@selector(refreshDatas:) withObject:notification waitUntilDone:YES];
      return;
  }

  [[self managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
}
如果这不是问题所在,请尝试在问题中添加一些细节。核心数据很难,如果没有细节,就很难理解发生了什么

编辑

如果
[notification object]
(本例中为上下文)是主要更改,则不合并更改。相反,如果该上下文来自不同的线程,则合并更改。这是出于性能原因,但您可以简单地将其删除


希望有帮助。

您使用的是后台线程吗?非常感谢您,但我不明白您为什么这样做:如果([notification object]===[self-managedObjectContext])返回@marcL我添加了一个编辑。如果你愿意,也可以投票。这个解决方案对你有用吗?