Я хочу начать работу с Core Data и SwiftUI и поэтому создал новый проект watchOS с использованием новейшего GM Xcode 11.1.
Затем я скопировал оба persistentContainer
& saveContext
из свежего проекта iOS(с включенными Core Data), чтобы получить возможности Core Data.
После этого я изменил HostingController
, чтобы он возвращал AnyView
, и установил переменную в среде.
class HostingController: WKHostingController<AnyView> {
override var body: AnyView {
let managedObjectContext = (WKExtension.shared().delegate as! ExtensionDelegate).persistentContainer.viewContext
return AnyView(ContentView().environment(\.managedObjectContext, managedObjectContext))
}
}
СейчасЯ могу получить доступ к контексту внутри ContentView
, , но не в его подэкранах .
Но разве это не так, как задумано?Насколько я знаю, все вложенные представления должны наследовать свое окружение от своих суперпредставлений, верно?
Прямо сейчас, чтобы получить к нему доступ внутри своих вложенных представлений, я просто снова устанавливаю переменные среды, например:
ContentView.swift
NavigationLink(destination: ProjectsView().environment(\.managedObjectContext, managedObjectContext)) {
HStack {
Image(systemName: "folder.fill")
Text("Projects")
}
}
Как только я удалю параметр .environment () внутри ContentView, приложение будет аварийно завершено, поскольку не загружен контекст?!
Сообщение об ошибкеContext in environment is not connected to a persistent store coordinator: <NSManagedObjectContext: 0x804795e0>
.
ProjectsView.swift
struct ProjectsView: View {
@Environment(\.managedObjectContext) var managedObjectContext
[...]
}
Но опять же, это не может быть правильно?Итак, что является причиной ошибки здесь?