V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FaiChou
V2EX  ›  Swift

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

  •  
  •   FaiChou ·
    FaiChou · 2022-11-11 14:33:04 +08:00 · 1034 次点击
    这是一个创建于 742 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开发 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.

    第 1 条附言  ·  2022-11-11 15:14:47 +08:00
    ps. 没有 UIKit AppKit 的开发经验
    1 条回复    2022-11-11 15:51:47 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1052 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:17 · PVG 03:17 · LAX 11:17 · JFK 14:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.