首页 > 解决方案 > SwiftUI 和 db 使用 Core Data 为空

问题描述

大家好,到目前为止,我已经使用对 sqlite3 的简单调用来进行 CRUD 操作。我使用 xcode 下载了我的应用程序的容器,我检查了使用 DB Browser for SQLite 创建的数据库,对我来说一切都很好。我在数据库中找到了我所期望的一切。今天我将 Core Data 集成到我现有的项目中。我创建了一个名为“Libro”的简单实体并插入了一些记录。我重新检查了由核心数据管理的数据库,但在其中找不到任何记录。即使我关闭它并重新打开它,记录在应用程序上也是可见的,但数据库是空的。这个问题的原因是什么?同样在核心数据中,我如何使用默认记录预先填充一些表?最后,使用 Core Data 修改数据库和更新应用程序的最佳实践是什么?

struct ExampleView: View {

@Environment(\.managedObjectContext) var managedObjectContext

@FetchRequest(entity: Libro.entity(), sortDescriptors: [], predicate: nil, animation: nil) var libri: FetchedResults<Libro>

var body: some View {
    
    Button(action: {
        let newLibro = Libro(context: managedObjectContext)
        newLibro.titolo = "ciao"
        newLibro.id = UUID()
        PersistenceController.shared.save()
    }, label: {
        Text("new Libro")
    })
            
    List{
        ForEach(libri, id:\.id){ libro in
            Text("titolo: " + "\(libro.titolo ?? "Unk")"  + " uiid: " + "\(libro.id?.uuidString ?? "UUID NOT NKONOW")")
        }
    }
    
}




class PersistenceController{

static let shared = PersistenceController()


let container: NSPersistentContainer


private init(){
    container = NSPersistentContainer(name: "Example")
    container.loadPersistentStores{(description, error) in
        
        if let error = error {
            fatalError("Fatal Error - Core Data Store failed \(error.localizedDescription)")
        }
    }
}

func save(completion: @escaping (Error?) -> () = { _ in}){
    
    let context = container.viewContext
    if context.hasChanges {
        do{
            try context.save()
            print("salvato")
            completion(nil)
        }
        catch{
            completion(error)
        }
        
    }
}


func delete(_ object: NSManagedObject, completion: @escaping (Error?) -> () = { _ in} ){
    let context = container.viewContext
    context.delete(object)
    save(completion: completion)
}

Libro 表中没有记录

即使我关闭并再次打开应用程序,我也可以看到插入的记录

标签: swiftsqlitecore-dataswiftui

解决方案


推荐阅读