swift 如何删除Core Data永久存储中的所有内容而不加载它?

tvz2xvvm  于 2023-01-19  发布在  Swift
关注(0)|答案(1)|浏览(108)

我一直在我的项目中尝试一些更改,并一直在添加和删除实体的Core Data示例。
最终,由于我的代码发生了变化,已经存储在持久存储中的数据变得损坏,无法加载。每当Core Data试图加载我的数据时,应用程序都会崩溃。
我知道问题出在哪里--我需要从持久存储中删除一些核心数据实体的示例,但我无法在模拟器中通过滑动删除来完成,因为当核心数据试图加载时,应用程序会崩溃。
如何通过代码删除持久存储中的所有内容,而不加载存储?
我知道有一个函数可以销毁持久*存储,但老实说,我不知道应该如何以及在哪里使用它。
我想我应该更改DataController中的代码。
下面是我如何加载NSPersistentContainer(数据控制器类)

import Foundation
import CoreData

class DataController: ObservableObject {
    let container = NSPersistentContainer(name: "iLegal")
    
    init () {
        container.loadPersistentStores { description, error in
            if let error = error {
                print("Core Data failed to load: \(error.localizedDescription)")
                return
            }
        }
    }
    
}

然后创建NSPersistentContainer的@StateObject并将其发送到环境

import SwiftUI

@main
struct iLegalApp: App {
    
    @StateObject private var dataController = DataController()
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(\.managedObjectContext, dataController.container.viewContext)
        }
    }
}

救命啊!

blmhpbnm

blmhpbnm1#

@lorem-ipsum谢谢!我想明白了!
在DataController类中,我基本上将init()函数重写为:

init () {
    do {
        try container.persistentStoreCoordinator.destroyPersistentStore(at: container.persistentStoreDescriptions.first!.url!, type: .sqlite, options: nil)
        print("Success")
    } catch {

        print(error.localizedDescription)
        print("Fail")
    }

我运行了项目,persistentStore是空的。
然后我又说:

init () {
        container.loadPersistentStores { description, error in
            if let error = error {
                print("Core Data failed to load: \(error.localizedDescription)")
                return
            }
        }
    }
}

相关问题