mergeChangesFromContextDidSaveNotification花了差不多一分钟

时间:2009-12-08 22:04:23

标签: iphone multithreading core-data

我在一个单独的线程中有一个托管对象上下文,它创建了几百个托管对象,当它保存时,did保存通知被传递给主线程,而我的另一个上下文(在主线程上)被更新:

在线程

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

问题在于合并需要很长时间,有时需要40-50秒,这就是锁定主线程& UI。是否有任何理由需要这么长时间来更新?

修改

这似乎只有在获取的结果控制器当前正在显示将受合并影响的数据时才会出现。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我假设您的NSFetchedResultsController有一个NSFetchedResultsControllerDelegate,由于合并,必须处理大量更新。这些更新将导致表中的大量活动,这可能导致滞后。

你可能需要做的是创建一个包装器方法,当在主线程上调用时暂时从NSFetchedResultsController删除委托,然后调用managedObjectContextDidSave,然后刷新表,然后恢复{ {1}}。