我在现有应用程序中添加了Today Extension并设置了一个单独的核心数据堆栈(重用相同的代码,用于为主应用程序设置核心数据)。
当我运行Today扩展时,我的应用程序数据被删除,就像设置Today核心数据堆栈删除现有数据一样。请参阅以下代码以返回persistentCoordinator
:
let options = [NSMigratePersistentStoresAutomaticallyOption:true,
NSInferMappingModelAutomaticallyOption:true,
NSSQLitePragmasOption:["journal_mode":"MEMORY"]]
var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: options, error: &error) == nil {
NSLog("Unresolved error \(error)")
}
return coordinator
答案 0 :(得分:0)
经过大量调试,并阅读Google搜索博客和文档后,我认为问题归因于mergedModelFromBundles
的{{1}}方法。
我的包中有多个 .xcdatamodels ,在设置核心数据堆栈时,我使用上面的方法合并单个模型。
作为今天设置的核心数据堆栈,从该方法返回的模型与主应用程序用于创建sqlite存储的模型不同,因此返回的持久存储是不同的并且需要迁移。
但是,迁移往往是失败并删除我的.sqlite(由主应用程序设置)并且正在设置一个新的sqlite。
我找到的一个解决方案是使用
NSManagedObjectModel
获取托管对象模型的方法,其中url是bundle中momd文件的路径url
请参阅:Core Data Migration Guide
但是,我还没想到,如何将三个不同的xcdatamodelids的路径网址作为单路径网址,以及如果将来任何xcdatamodel更改,如何迁移它们。
所以,目前我已经将三个xcdatamodels合并到我的bundle中的单个xcdatamodel来解决这个问题。