在后台线程中解析json并用swiftData保存

问题描述 投票:0回答:0

我正在尝试解析从捆绑包中保存的 JSON 文件,并使用 swiftdata 将其保存在我的数据库 Airport 上。

为了简化代码,我编写了一个 for 循环,该循环应将数据添加到数据库中,但我遇到了意外的行为,如果我使用以下代码,则不会将任何内容添加到 Airport 数据库中:

 func parseJsonDBAirport(){
        DispatchQueue.global().async { /// if i remove this airport are add
            
            
            do {

                
                for _ in 1...100{
                    let modelContainer = try ModelContainer(for: Airport.self)
                    let mc = ModelContext(modelContainer)
                    let airport = Airport(lastPicked: Date(), icao: "test")
                    mc.insert(airport)
                    
                   
                }
            }catch {
                
                print("error DO parse")
            }
            
          
        }
    }


为什么我不能在后台线程上运行它?

如果我在主线程上运行,我的测试机场被正确添加了 100 次,我如何在后台运行,为什么我的第一个代码是错误的?

 func parseJsonDBAirport(){

                     
            do {
                
                for _ in 1...100{
                    let modelContainer = try ModelContainer(for: Airport.self)
                    let mc = ModelContext(modelContainer)
                    let airport = Airport(lastPicked: Date(), icao: "test")
                    mc.insert(airport)
                    
                   
                }
            }catch {
                
                print("error DO parse")
            }
            

    }


为什么如果我将 modelContainer 和上下文移出循环,只保存了一个测试机场?


  func parseJsonDBAirport(){

           
            
            do {
                
              

                let modelContainer = try ModelContainer(for: Airport.self)
                let mc = ModelContext(modelContainer)
                for _ in 1...100{
                    
                    let airport = Airport(lastPicked: Date(), icao: "test")
                    mc.insert(airport)
                    
                   
                }
            }catch {
                
                print("error DO parse")
            }
            

    }


swift database swiftui core-data swiftdata-apple
© www.soinside.com 2019 - 2024. All rights reserved.