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

时间:2012-10-03 15:35:08

标签: ios uitableview core-data nsfetchedresultscontroller nsmanagedobjectcontext

我使用NSFetchedResultsControllerDelegate在我的所有数据下载并插入coreData后显示我的单元格。 我使用下面的代码知道修改发生的时间

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshDatas:) name:NSManagedObjectContextDidSaveNotification object:nil];

然后,这个方法被称为

- (void)refreshDatas:(NSNotification *)notification
{
    [[self.fetchedResultsController managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
}

但是,我有一个问题,第一次调用委托NSFetchedResultsControllerDelegate的insertRowAtIndexPath和插入UITableView的单元格显示之间有5到10秒,我不知道为什么。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

- (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](本例中的上下文)是主要变更,则不合并更改。相反,如果该上下文来自不同的线程,则合并更改。这是出于性能原因,但您可以将其删除。

希望有所帮助。