正确设置 MagicalRecord 以在后台线程上保存 rootSavingContext

Posted

技术标签:

【中文标题】正确设置 MagicalRecord 以在后台线程上保存 rootSavingContext【英文标题】:Setting up MagicalRecord correctly to save rootSavingContext on background thread 【发布时间】:2013-07-26 00:41:05 【问题描述】:

我一直在为我当前的项目 (v2.1) 试用 MagicalRecord 和 MagicalImport。到目前为止一切都很好,除了我有时会看到我的 UI 线程在我注入新实体时被锁定。这就是我插入新实体的方式:

    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) 
         //import an entity here
    ]

在保存实体时,我在调试控制台中经常注意到这一点:

 Saving <NSManagedObjectContext (0x1c558da0): *** BACKGROUND SAVING (ROOT) ***> on *** MAIN THREAD ***

我已经浏览了 github 上的 MagicalRecord 代码,似乎他们正在使用此处提到的 3 级 MOC 策略:http://www.cocoanetics.com/2012/07/multi-context-coredata/。在这种情况下,根上下文应该保存在后台线程上,而不是日志建议的主线程上。我使用以下行来启动和运行 coredata 堆栈:

  [MagicalRecord setupCoreDataStackWithStoreNamed:COREDATA_STORENAME];

我的设置方式有问题吗?为什么我的根上下文没有保存在后台线程上?

【问题讨论】:

【参考方案1】:

这是 MagicalRecord 中的一个错误。如果您需要立即修复它,请尝试切换到实验分支,我相信它已经在那里解决了。

【讨论】:

感谢您的回复。我不确定我是否完全理解你。您的意思是 MagicalRecord 实际上将根上下文保存在后台线程上,还是在调试日志中错误地这么说?如果只是调试日志有问题并且没有 UI 锁定,那么我可以使用 2.1 版本,否则我会得到实验分支。谢谢! bug在MR_save方法中,所以不是错误日志。 切换到实验分支也没有解决问题。我不确定发生了什么。很可能我将不得不离开 MR 并自己进行数据导入。感谢您的帮助! 其实我错了一部分。切换到实验分支有点帮助。非常感谢您的帮助!

以上是关于正确设置 MagicalRecord 以在后台线程上保存 rootSavingContext的主要内容,如果未能解决你的问题,请参考以下文章

在后台线程中使用 MagicalRecord 和 NSXMLParser

如何确保在使用 MagicalRecord 3.0 保存后台线程后通知 NSFetchedResultsController

带有 UITableView 示例的 MagicalRecord

在 CoreData 的后台线程中创建实体

Magical Record - 在主线程块 ui 中获取,在后台返回 nil

更改无法识别我的 NSFetchedResultsController 附加到后台线程