【问题标题】:Preview crashes when saving to core data but simulator works保存到核心数据但模拟器工作时预览崩溃
【发布时间】:2021-10-18 17:14:48
【问题描述】:

我正在 swiftUI 中创建一个简单的待办事项列表。在预览中将任务保存到核心数据时,它会崩溃。但是,使用模拟器可以正常工作。我尝试重新打开项目并在网上寻找类似的问题,但还没有找到任何东西。 如果有人可以帮助我,那就太好了,我是 IOS 和 Xcode 的新手。非常感谢! 这是我的代码:

import SwiftUI

struct ContentView: View {
    
    @Environment(\.managedObjectContext) private var viewContext
    
    @FetchRequest(sortDescriptors: []) private var tasks:
        
        // gets stuff from entity "Task" in datamodel
        FetchedResults<Task>
    
    @State var name: String = ""
    @State var cat: String = ""
    
    var body: some View {
        
        
        VStack{
        
            TextField("Enter Task Name", text: $name)
            
            TextField("Enter Task Category", text: $cat)
            
            Button(
                action: {
                    
                    let newTask = Task(context: viewContext)
                    
                    
                    newTask.name = name
                    newTask.category = cat
                    
                    do{
                        try viewContext.save()
                    }
                    catch{
                        let error = error as NSError
                        fatalError("unresolved error:\(error)")
                    }
                },
                label:{
                    Text("Save Task")
                }
            )
            
            List{
                ForEach(tasks, id:\.self){
                    task in Text(task.name ?? "untitled")
                }
            }
        }
        
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

【问题讨论】:

  • 你的预览还需要一个托管对象上下文
  • 这能回答你的问题吗? SwiftUI Preview canvas and Core Data
  • 是否有任何错误信息?通常有,而且它们通常是了解问题所在的关键部分。
  • @JoakimDanielson 我该怎么做?
  • @TomHarrington 遗憾的是调试控制台没有显示错误消息!

标签: xcode core-data swiftui simulator preview


【解决方案1】:

你正在使用这个

@Environment(\.managedObjectContext) private var viewContext

所以你需要把它传入。

static var previews: some View {
    ContentView()
            .environment(\.managedObjectContext, moc)
}

在预览中使用上下文时,请使用 NSPersistentStoreDescription 类型为NSInMemoryStoreType

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多