ios - 带有 didChangeObject 的 NSFetchedResultsController 在表格 View 中显示单元格的速度很慢

标签 ios uitableview core-data nsfetchedresultscontroller nsmanagedobjectcontext

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

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

然后,调用这个方法

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

但是,我有一个问题,第一次调用委托(delegate) NSFetchedResultsControllerDelegate 的 insertRowAtIndexPath 与插入 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];
}

如果这不是问题,请尝试为您的问题添加一些详细信息。核心数据很困难,没有细节就很难理解正在发生的事情。

编辑

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

希望有帮助。

关于ios - 带有 didChangeObject 的 NSFetchedResultsController 在表格 View 中显示单元格的速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12711872/

相关文章:

ios - 在 UITableViewCell 中显示突出显示的图像

swift - 无法从 didReceiveLocalNotification 重新加载 UITable

ios - 如何发布依赖于关系的自定义核心数据属性的通知?

ios - 使用 Parse iOS 处理多个设备上的登录

ios - Swift - 更改 CollectionView header 的高度

ios - GIDSignInButton - 以 NSException 类型的未捕获异常终止

ios - 用选择器覆盖方法“tableview :cellForRowAtIndexPath

ios - Swift 2.1 Core Data - 使用 setValue() 预填充数据只保留最后一个

ios - 核心数据模型设计

ios - 添加Firebase SDK后未调用didRegisterForRemoteNotificationsWithDeviceToken。禁用漩涡