我正在尝试解析从捆绑包中保存的 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")
}
}