开发者

mergeChangesFromContextDidSaveNotification taking almost a minute

I have a managed object context in a separate thread that is creating a few hundred managed objects, and when it saves, the did save notification is passed to the main thread and my other context (on the main thread) is updated:

In Thread

[ApplicationDelegate performSelectorOnMainThread:@selector(managedObjectContextDidSave:) 
                                      withObject:notification 
                 开发者_JAVA技巧                  waitUntilDone:NO];

The problem is that the merging is taking a very long time, sometimes 40-50 seconds, and this is locking up the main thread & UI. Is there any reason why it would take this long to update?

Edit

This appears to only happen if there is a fetched results controller that is currently displaying data that will be affected by the merging. Any ideas?


I am assuming that your NSFetchedResultsController has a NSFetchedResultsControllerDelegate which is having to handle lots of updates as a result of the merge. These updates will result in lots of activity within the table, which might be causing the lag.

What you might have to do is create a wrapper method which when called on the main thread temporarily removes the delegate from the NSFetchedResultsController, then invokes managedObjectContextDidSave, then refreshed the table, then reinstates the NSFetchedResultsControllerDelegate.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜