使用关系从核心数据实体中获取数据

时间:2020-05-05 19:23:12

标签: swift core-data swiftui

我的核心数据模型中有两个实体,Componentsto-many。一台计算机可以具有多个组件,因此关系设置为ComputercomputerName还具有属性 @Environment(\.managedObjectContext) var moc: NSManagedObjectContext @FetchRequest(entity: Computer.entity(), sortDescriptors: []) var computerToDisplay: FetchedResults<Computer>

添加组件时,我希望所选计算机出现在添加组件视图中。这个添加组件视图是用SwiftUI编写的,我有以下代码来创建ManagedObjectContext并获取计算机对象:

    ForEach(computerToDisplay, id: \.self) { computer in
        Text(computer.computerName)
    }

然后我运行下面的ForEach循环,希望它可以抓住计算机并将其放置在“文本”字段中

Thread 1: Exception: "executeFetchRequest:error: A fetch request must have an entity."

使用此代码,当我尝试打开添加组件视图时,出现以下错误:

@IBSegueAction func addComponentSegueAction(_ coder: NSCoder) -> UIViewController? {
    let swiftUIView = UIHostingController(rootView: AddComponentView().environment(\.managedObjectContext, moc!))
    present(swiftUIView, animated: true, completion: nil)
    return UIHostingController(coder: coder, rootView: AddComponentView())
}

现在,我正在从UIKit ViewController加载添加组件视图。所以我不确定是否没有传递给添加组件视图。

这是我加载组件视图的方式:

{{1}}

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

尝试一下,

@IBSegueAction func addComponentSegueAction(_ coder: NSCoder) -> UIViewController? {
    let swiftUIView = UIHostingController(coder: coder, rootView: AddComponentView().environment(\.managedObjectContext, moc!)
    return swiftUIView
}

似乎,您正在使用AddComponentView()创建UIHostingViewController的多个实例,并返回环境中没有AddComponentView() managedObjectContext的一个实例。

谢谢!

相关问题