带有核心数据的SwiftUI在Xcode 12中的模拟器中出现空白屏幕

问题描述

在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并保存。

,

在模拟器中清除“设备->删除所有内容和设置”下的数据对我有用