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

Sai*_*esh 6 core-data ios-simulator swiftui xcode12

在 XCode 12 中,如果我创建一个新的 SwiftUI 应用程序并选中“使用核心数据”按钮,则生成的应用程序(没有更改)会在模拟器(以及设备上)显示一个空白屏幕。在预览中,它按预期显示示例时间戳。为什么模拟器/设备没有显示示例时间戳?

小智 5

如果您想在模拟器中查看模板中的示例输入(带有时间戳的 10 行),则需要在 App.swift 中进行更改:

让persistenceController = PersistenceController.shared

让persistenceController = PersistenceController.preview

如果没有这个变化,Apple 提供的模板仅在 ContentView 的画布预览中显示示例输入。Persistence.swift 文件有两个静态变量:shared 和 preview。.shared 只是启动一个(空)PersistenceController,而 .preview 静态变量启动一个 PersistenceController,将带有当前时间戳的十个项目添加到 viewContext 并保存它。


upl*_*com 5

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
}
Run Code Online (Sandbox Code Playgroud)

同样要使预览工作,您需要将 PersistenceController 更改为shared而不是preview

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environment(\.managedObjectContext, PersistenceController.shared.container.viewContext)
    }
}
Run Code Online (Sandbox Code Playgroud)


Sai*_*esh 0

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