【问题标题】:Today Extension deleting data in sqliteToday Extension 删除 sqlite 中的数据
【发布时间】:2015-06-04 10:51:10
【问题描述】:

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

【问题讨论】:

  • 您的storeurl 似乎不正确,请确保它使用分组文件夹。您的函数 applicationDocumentsDirectory 应该返回 groupPath,在您的情况下,应用程序似乎正在创建一个新的 CoreData,而不是使用正确的。
  • 我正在使用共享组标识符来设置核心数据。只有当我今天尝试打开(获取数据)并且主应用程序没有被杀死时,数据才会删除。如果主应用程序被杀死,今天可以正常工作并且没有数据被删除。
  • 为什么将journal_mode 设置为MEMORY? SQLite 文档说这个"...saves disk I/O but at the expense of database safety and integrity."
  • 我实现了pablin.org/2013/05/24/…中提到的解决方案。问题仍然存在,但我的数据没有。
  • 那篇博文没有说明将日记模式设置为MEMORY

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


【解决方案1】:

经过大量调试并阅读谷歌搜索的博客和文档后,我认为问题出在 mergedModelFromBundlesNSManagedObjectModel 方法上。
我的包中有多个 .xcdatamodels,在设置核心数据堆栈期间,我使用上述方法合并单个模型。
由于为 Today 设置的核心数据堆栈,从该方法返回的模型与 Main 应用程序用于创建 sqlite 存储的模型不同,因此返回的持久存储不同,需要迁移。
但迁移往往失败并删除我的 .sqlite(由主应用程序设置)并设置新的 sqlite。
我发现的一种解决方案是使用
NSManagedObjectModel(contentsOfURL: modelPathURL!)
获取托管对象模型的方法,其中url是bundle中momd文件的路径url。
参考:Core Data Migration Guide

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

【讨论】:

    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多