MagicalRecord:在后台线程上设置核心数据堆栈

MagicalRecord:在后台线程上设置核心数据堆栈

问题描述:

Marcus Zarra在他的核心数据手册中建议在设置应用程序的核心数据栈时,其中一项是在后台线程上调用addPersistentStoreWithType:configuration:URL:options:error:,因为它可以采取不确定的时间量(例如,运行迁移)。有没有简单的方法告诉M​​agicalRecord来做到这一点?它看起来像它的所有setupCoreDataStack...方法执行调用(大概是主)线程上的一切。MagicalRecord:在后台线程上设置核心数据堆栈

我认为将*设置调用移动到后台线程上并不合理,因为直到至少创建了上下文为止,从主线程开始使用MR并不安全,对?我是否需要实施我自己的setupCoreDataStackWithAsyncMigration或其他?

有一个wwdc2012示例代码用于在后台线程(Shared Core Data示例)上设置iCloud。您可以折射CoreDataController以使用MagicalRecord(并忽略任何iCloud)。 IIRC锁定机制在安装过程中阻止其他线程访问存储区已经存在。

在你走下去之前,测量在设备上启动所需的时间。如果启动速度足够满足您的需求,那么您可能需要坚持主线程上的设置。

迁移可能需要一些时间,但每次应用启动时都不会发生迁移。迁移时间取决于数据量和模型版本之间变化的复杂程度。因此,再次投入时间将迁移迁移到后台线程或让用户等待是一种判断。