代码之家  ›  专栏  ›  技术社区  ›  Michael Waterfall

MergeChangesFromContextDidSaveNotification几乎需要一分钟

  •  1
  • Michael Waterfall  · 技术社区  · 16 年前

    我在一个单独的线程中有一个托管对象上下文,该线程正在创建几百个托管对象,当它保存时,DID SAVE通知将传递给主线程,我的其他上下文(在主线程上)将更新:

    螺纹内螺纹

    [ApplicationDelegate performSelectorOnMainThread:@selector(managedObjectContextDidSave:) 
                                          withObject:notification 
                                       waitUntilDone:NO];
    

    问题是合并需要很长时间,有时需要40-50秒,这将锁定主线程和UI。有什么理由需要这么长时间才能更新吗?

    编辑

    只有当当前正在显示受合并影响的数据的提取结果控制器时,才会出现这种情况。有什么想法吗?

    1 回复  |  直到 16 年前
        1
  •  3
  •   lyonanderson    16 年前

    我假设你的 NSFetchedResultsController 有一个 NSFetchedResultsControllerDelegate 由于合并,它必须处理大量的更新。这些更新将导致表中存在大量活动,这可能导致延迟。

    您可能需要做的是创建一个包装方法,当在主线程上调用时,该方法会临时从 未保存的结果控制器 然后调用 managedObjectContextDidSave ,然后刷新表,然后恢复 控制删除的未保存结果 .