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

时间:2016-04-19 09:34:58

标签: ios swift core-data core-data-migration

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

  

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

     

然后,从Core Data选项卡添加新文件,作为Mapping Model Select,   源模型(提交的应用程序正在使用的模型版本)   目标模型(您已完成更改的模型版本)

     

source

但我的数据主要是图像和应用程序崩溃,因为它占用了大量内存。所以我想删除旧数据模型及其数据,并在用户更新应用程序时创建空的新模型数据。怎么做?

1 个答案:

答案 0 :(得分:3)

如果数据模型发生变化,您只需检查数据库文件的模型即可。如果不是新的,请使用NSFileManager删除StoreCoordinator中指定的文件,然后再次启动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中的文本文件。您只需要一个标志来检查数据库是否已更新/清除。

然后,您也可以删除上面的数据库或获取所有对象并删除它们。