Получение данных из объекта Core Data с использованием отношений - PullRequest
0 голосов
/ 05 мая 2020

У меня есть две сущности в моей основной модели данных: Computer и Components. Компьютер может состоять из нескольких компонентов, поэтому отношение установлено как to-many. Computer также имеет атрибут computerName.

При добавлении компонента я хочу, чтобы выбранный компьютер отображался в представлении добавления компонента. Это представление добавляемого компонента написано на SwiftUI, и у меня есть этот код для создания ManagedObjectContext и для получения объекта компьютера:

    @Environment(\.managedObjectContext) var moc: NSManagedObjectContext
    @FetchRequest(entity: Computer.entity(), sortDescriptors: []) var computerToDisplay: FetchedResults<Computer>

Затем я запускаю следующий ForEach l oop, который, как я ожидал, возьмите компьютер и поместите его в текстовое поле.

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

С помощью этого кода, когда я пытаюсь открыть представление добавления компонентов, я получаю следующую ошибку:

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

Теперь я Я загружаю представление добавления компонента из UIKit ViewController. Поэтому я не уверен, что что-то не передается в представление добавления компонентов.

Вот как я загружаю представление компонентов:

@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())
}

Любая помощь будет принята с благодарностью, спасибо.

1 Ответ

1 голос
/ 06 мая 2020

Попробуйте это,

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

Кажется, вы создаете несколько экземпляров UIHostingViewController с вашим AddComponentView() и возвращаете тот, у которого нет AddComponentView() managedObjectContext в среде.

Спасибо!

...