SwiftUI 中如何在 ContentView 之外使用 CoreData ?

2022-11-11 14:33:04 +08:00
 FaiChou

开发 macOS 应用程序, 想在 MenuBarExtra 里访问 CoreData:

struct Project: App {
  @StateObject private var dataController = DataController()
  @FetchRequest(sortDescriptors: []) var students: FetchedResults<Student>
  var body: some Scene {
    MainScene()
    Settings { Text("Setting") }
    MenuBarExtra("Menu", systemImage: "swift") {
      List(students) { student in
        Text(student.name ?? "Unknown")
      }
      Divider()
      Button("Add") {
        let id = UUID()
        let name = "Foo"
        let context = dataController.container.viewContext
        let student = Student(context: context)
        student.id = id
        student.name = name
        try? context.save()
      }
    }
  }
}

我刚接触 CoreData, 参照 hackingwithswift 的例子, 它是将 viewContext 传递给 enviroment 中, 所以在 ContentView 里面都可以直接访问 @Environment(\.managedObjectContext) var moc.

但在 MenuBarExtra 中不知道如何处理, 无法注入 context, 并且当我按照上述例子中直接使用 context 时候编译器会报错:

Context in environment is not connected to a persistent store coordinator.

875 次点击
所在节点    Swift
1 条回复
FaiChou
2022-11-11 15:51:47 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/894478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX