如何简单地删除旧的核心数据并重建新的?

Posted

技术标签:

【中文标题】如何简单地删除旧的核心数据并重建新的?【英文标题】:How to simply delete old core data and rebuilt the new one? 【发布时间】:2016-04-19 09:34:57 【问题描述】:

我尝试将 coreData 迁移到新版本,我正在执行此步骤:

添加一个新的模型版本(选择 name.xcdatamodeld 然后 Editor->Add 模型版本)在进行任何更改之前,如果您已经有一个应用程序 提交到使用较早模型版本的 App Store。

然后,从核心数据选项卡添加一个新文件,作为映射模型选择, 源模型(提交的应用程序正在使用的模型版本) 目标模型(您已完成更改的模型版本)

source

但我的数据主要是图像和应用程序崩溃,因为它需要大量内存。所以我想在用户更新他们的应用程序时删除旧数据模型及其数据并创建空的新模型数据。如何做到这一点?

【问题讨论】:

【参考方案1】:

如果数据模型发生变化,您可以简单地检查数据库文件的模型。如果不是新的,删除StoreCoordinator中NSFileManager指定的文件,然后重新初始化你的StoreCoordinater和NSManagedContext创建一个新的。

类似的东西(未经测试的代码):

var error: NSError
var applicationDocumentsDirectory: NSURL = NSFileManager.defaultManager().URLsForDirectory(NSDocumentDirectory, inDomains:NSUserDomainMask).lastObject
let storeURL: NSURL = applicationDocumentsDirectory.URLByAppendingPathComponent("Database.sqlite")
NSFileManager.defaultManager().removeItemAtPath(storeURL.path, error)

Swift 4 更新:

    do
    
        var applicationDocumentsDirectory: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!
        let storeURL: URL = applicationDocumentsDirectory.appendingPathComponent("Database.sqlite")
        try FileManager.default.removeItem(atPath: storeURL.path)
    
    catch
    
        print(error.localizedDescription)
    

如果模型没有改变,你需要将更新的信息保存在任何地方。数据库本身或 UserDefaults 中的文本文件。您只需要一个标志来检查数据库是否已更新/清理。

然后您还可以像上面一样删除数据库或获取所有对象并删除它们。

【讨论】:

每次用户打开应用都会重新构建核心数据吗? @AldoLazardi 当你想要一个新的数据库时,这取决于你。一种选择是创建一个文本文件,在其中保存数据库的版本。如果版本太旧并且必须重新构建,则删除存储文件并重新创建一个空文件。 删除 -shm 和 -wal 文件以及相关的 Store 文件

以上是关于如何简单地删除旧的核心数据并重建新的?的主要内容,如果未能解决你的问题,请参考以下文章

Room DAO 更新如何最好地处理旧的不需要的数据

如何在solrj中创建新核心

如何使用 sqlalchemy 有效地管理频繁的模式更改?

如何删除旧的和未使用的 Docker 镜像

如何删除视图并重绘它

如何删除元素如何根据另一个rdd从一个rdd中删除元素并在pyspark中创建新的rdd?