OS X 上的 Core Data 轻量迁移

Posted

技术标签:

【中文标题】OS X 上的 Core Data 轻量迁移【英文标题】:Core Data light migration on OS X 【发布时间】:2015-04-21 11:29:48 【问题描述】:

我正在使用基于 Xcode 6 文档的应用程序和 OS X 的核心数据模板,它在幕后设置核心数据堆栈(没有可见的初始化代码)。现在我需要执行一个简单的核心数据轻量级迁移,我已经创建了新的版本化模型并激活了它。我真的必须手动实现核心数据堆栈初始化才能通过迁移权限吗?如果是,应该在哪里初始化核心数据堆栈以覆盖默认值?

【问题讨论】:

几乎重复 - 看看这个,它应该可以在 swift 和 OS X 上相应地工作:***.com/questions/2310216/… 【参考方案1】:

您在评论中提到您正在使用基于文档的应用程序模板 - 这是原始问题中遗漏的关键细节。

使用此模板,您将使用NSPersistentDocument 的子类。如果要使用NSPersistentDocument 配置迁移,则需要覆盖configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:。您的实现将使用一组不同的选项调用super 的实现。像这样的:

override func configurePersistentStoreCoordinatorForURL(url: NSURL!, ofType fileType: String!, modelConfiguration configuration: String?, storeOptions: [NSObject : AnyObject]!, error: NSErrorPointer) -> Bool 

    let options = [ NSMigratePersistentStoresAutomaticallyOption : true,
        NSInferMappingModelAutomaticallyOption: true ]

    return super.configurePersistentStoreCoordinatorForURL(url, ofType: fileType, modelConfiguration: configuration, storeOptions: options, error: error)

【讨论】:

为什么是NSXMLStoreType?这里有一些微妙的虐待狂......? 不,只是从问题提到的同一个 Xcode 项目模板中复制和粘贴。 我刚刚创建了一个基于 CoreDataTest 文档的核心数据项目,AppDelegate 中绝对没有核心数据堆栈代码。这就是一切:import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate func applicationDidFinishLaunching(aNotification: NSNotification) // Insert code here to initialize your application func applicationWillTerminate(aNotification: NSNotification) // Insert code here to tear down your application Document.swift 文件也没有任何核心数据栈设置代码。 ...我正在使用 OSX 应用程序模板。

以上是关于OS X 上的 Core Data 轻量迁移的主要内容,如果未能解决你的问题,请参考以下文章

Core Data轻量级迁移有多少个迁移步骤?

Core Data(iPhone)实现“自动轻量级迁移”

考虑使用 Core Data 轻量级迁移的多个数据模型版本

Core Data 和 Restkit 简单轻量级迁移错误

Core Data 的推断映射模型创建(轻量级迁移)崩溃。线程问题?

Core Data 轻量级迁移 - 现有实体是不是添加了新属性?