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 轻量迁移的主要内容,如果未能解决你的问题,请参考以下文章