今天Extension在sqlite中删除数据

时间:2015-06-04 10:51:10

标签: ios sqlite core-data ios8-today-widget today-extension

我在现有应用程序中添加了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

1 个答案:

答案 0 :(得分:0)

经过大量调试,并阅读Google搜索博客和文档后,我认为问题归因于mergedModelFromBundles的{​​{1}}方法。
我的包中有多个 .xcdatamodels ,在设置核心数据堆栈时,我使用上面的方法合并单个模型。
 作为今天设置的核心数据堆栈,从该方法返回的模型与主应用程序用于创建sqlite存储的模型不同,因此返回的持久存储是不同的并且需要迁移。 但是,迁移往往是失败并删除我的.sqlite(由主应用程序设置)并且正在设置一个新的sqlite。
我找到的一个解决方案是使用
 NSManagedObjectModel
获取托管对象模型的方法,其中url是bundle中momd文件的路径url 请参阅:Core Data Migration Guide

但是,我还没想到,如何将三个不同的xcdatamodelids的路径网址作为单路径网址,以及如果将来任何xcdatamodel更改,如何迁移它们。
所以,目前我已经将三个xcdatamodels合并到我的bundle中的单个xcdatamodel来解决这个问题。