【问题标题】:SwiftUI with Core Data getting Blank Screen in simulator in Xcode 12带有Core Data的SwiftUI在Xcode 12的模拟器中获得黑屏
【发布时间】:2021-01-08 07:02:17
【问题描述】:

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

【问题讨论】:

  • 我们很乐意为您提供帮助,但由于工作内容太少,任何答案都只能靠猜测。请编辑您的问题以提供更多信息:所有应用程序都会发生这种情况,还是只有一个应用程序会发生这种情况?它总是发生,还是已经开始发生?你的代码是什么?
  • Xcode 12.4 还是有问题我提交了反馈openradar.appspot.com/radar?id=4939835114520576

标签: core-data swiftui ios-simulator xcode12


【解决方案1】:

工具栏项默认代码在 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)
    }
}

【讨论】:

    【解决方案2】:

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

    让 persistenceController = PersistenceController.shared

    让 persistenceController = PersistenceController.preview

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

    【讨论】:

    • 确实如此。但我想核心问题是模拟器没有显示添加项目的控件。
    • 我将 ContentView 中的 List 包装在 NavigationView 中,并将工具栏修饰符的每个按钮包装在 ToolBarItem 中。之后,我可以在模拟器中看到 Edit 和 Add 按钮作为 NavigationBarButtons,并且可以使用这些控件添加项目。
    【解决方案3】:

    清除模拟器中的数据对我不起作用。

    我在 .toolbar 上苦苦挣扎,但发现它只适用于已发布的 XCode 12 中的 NavigationView。

    所以如果你使用的是点击使用Core Data时自带的模板,只需添加到ContentView即可。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 伟大的@SaiDurgaMahesh
      猜你喜欢
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2020-10-15
      • 2015-12-18
      • 2021-03-26
      相关资源
      最近更新 更多