【问题标题】:Accessing and looping on Core Data from the app's @main class从应用程序的 @main 类访问和循环核心数据
【发布时间】:2022-06-22 00:08:49
【问题描述】:

我有一个简单的 Core Data macOS 应用,其数据模型如下:

Entity:
Data

Attributes:
text     String
starred  Boolean
date     Date 

我正在尝试从我创建的自定义菜单中访问数据,对其进行迭代并(将来)将其保存到磁盘。

我一直在尝试将代码直接添加到创建为的菜单项:

@main
struct My_DataApp: App {
    let persistenceController = PersistenceController.shared
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environment(\.managedObjectContext, persistenceController.container.viewContext)
                .frame(minWidth: 560, maxWidth: .infinity,
                       minHeight: 300, maxHeight: .infinity)
                .onAppear {
                    NSWindow.allowsAutomaticWindowTabbing = false
                }
        }
        .windowToolbarStyle(UnifiedWindowToolbarStyle(showsTitle: false))
        .commands{
            CommandGroup(after: CommandGroupPlacement.newItem) {
                Button("Export Data") {
                    @FetchRequest(entity: Data.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Data.date, ascending: false)], animation: .default)
                    var DataItems: FetchedResults<Data>
                    for data in DataItems {
                        print("\(String(describing: data.text))")
                    }

                }                
            }
        }

    }
}

Xcode 当然在抱怨:

我理解错误,但我不知道如何考虑从菜单访问数据。

我在这里看到了一些关于相同错误的帖子,我尝试将代码添加到 .onAppear 部分,但那里发生了同样的错误。

感谢您的帮助。

【问题讨论】:

  • 包装器应该只在结构级别,也许 NSFetchRequest 会为你工作。

标签: macos swiftui


【解决方案1】:

可以直接使用NSFetchRequest,通过视图上下文执行,比如

Button("Export Data") {

  let fetchRequest = Data.fetchRequest()
  // .. set up parameters

  let context = self.persistenceController.container.viewContext
  if let result = try? context.fetch(fetchRequest) {
    for data in result {
        print("\(String(describing: data.text))")
    }
  }
}                

【讨论】:

    猜你喜欢
    • 2017-05-31
    • 2014-07-04
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多