SwiftUI CoreData 崩溃预览



我有以下代码来绘制汽车列表,数据存储在coredata中。

但是,当我添加从数据库中获取数据的代码行时,swiftui 预览似乎中断了。

错误日志显示以下内容:

潜在崩溃错误:测试 app.app 可能已崩溃

里程 app.app 可能已经崩溃。检查 ~/库/日志/诊断报告来自您的任何崩溃日志 应用。

====

==================================| Error Domain=com.apple.dt.ultraviolet.service Code=12 "渲染 服务已中断" UserInfo={NSLocalizedDescription=Rendering 服务中断}

这是 foreach 开始和结束的部分导致错误的代码:

import SwiftUI
struct CarListView: View {
@Environment(.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Car.all()) var cars: FetchedResults<Car>
var body: some View {
NavigationView {
ZStack {
List {
Section(header: Text("Cars")) {
ForEach(self.cars, id: .numberPlate) { car in
HStack {
VStack(alignment: .leading) {
Text(car.name)
Text(car.numberPlate)
}
}
}
}
}
}
}
}
}
struct CarListView_Previews: PreviewProvider {
static var previews: some View {
CarListView()
}
}

这个问题似乎与它无法以某种方式获得允许在预览模式下获取数据的上下文有关。通过手动为预览模式执行此操作,它可以解决问题。

struct CarListView_Previews: PreviewProvider {
static var previews: some View {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
return CarListView().environment(.managedObjectContext, context)
}
}

如果其他人想知道,这崩溃了,因为在模拟特定视图的预览时,它没有基本系统环境提供的上下文信息:在本例中为 managedObjectContext。因此,它会崩溃,因为他引用了环境提供的对象。通过提供对象的静态版本(viewContext:ManagedObjectContext(,它允许预览加载和断言任何所需的上下文。

对于大多数较新的应用程序,以下内容也将起作用:

struct CarListView_Previews: PreviewProvider {
static var previews: some View {
let persistentController = PersistentController.preview
CarListView().environment(.managedObjectContext, persistentController.container.viewContext)
}
}

最新更新