0

我使用 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 秒,我不知道为什么。

谢谢你的帮助

4

1 回答 1

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]如果(在这种情况下为上下文)是主要的,则您不会合并更改。相反,如果该上下文来自不同的线程,则合并更改。这是出于性能原因,但您可以简单地删除它。

希望有帮助。

于 2012-10-03T15:41:44.827 回答