问题描述
在xcode12中,使用核心数据运行SwiftUI代码时,模拟器上出现空白屏幕。有解决方案吗?
解决方法
工具栏项目默认代码在 SwiftUI 中被破坏:在模板代码中使用它。将列表嵌入到 NavigationView 中,然后将按钮嵌入到 HStack 中。
var body: some View {
NavigationView { //added
List {
ForEach(items) { item in
Text("Item at \(item.timestamp!,formatter: itemFormatter)")
}
.onDelete(perform: deleteItems)
} .toolbar {
#if os(iOS)
HStack { //added
EditButton()
Button(action: addItem) {
Label("Add Item",systemImage: "plus")
}
}//added
#endif
}
}//added NavView embed
}
还要使预览正常工作,您需要将 PersistenceController 更改为 shared 而不是 preview。
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environment(\.managedObjectContext,PersistenceController.shared.container.viewContext)
}
}
,
在模拟器中清除数据对我不起作用。
我在.toolbar方面苦苦挣扎,但发现它仅适用于发布的XCode 12中的NavigationView。
因此,如果您使用的是单击以使用Core Data时附带的模板,只需将其添加到ContentView。
,如果要在模拟器中查看来自模板的示例输入(带有时间戳的10行),则需要在App.swift中进行更改:
让persistenceController = PersistenceController.shared
到
让persistenceController = PersistenceController.preview
没有进行此更改,Apple提供的模板仅在ContentView的画布预览中显示示例输入。 Persistence.swift文件具有两个静态变量:共享和预览。 .shared只是启动一个(空的)PersistenceController,而.preview静态变量启动一个PersistenceController,将带有当前时间戳的十项添加到viewContext并保存。
,在模拟器中清除“设备->删除所有内容和设置”下的数据对我有用