相关疑难解决方法(0)

环境变量未传递给子视图

我想开始使用 Core Data 和 SwiftUI,因此使用最新的 Xcode 11.1 GM 创建了一个新的 watchOS 项目。

然后,我从一个新的 iOS 项目(启用了 Core Data)中复制了persistentContainer& saveContext,以获得 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))
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我可以访问 内部的上下文ContentView但不能访问其子视图中的上下文。
但这不是它的意图吗?据我所知,所有子视图都应该从其超级视图继承其环境,对吗?

现在,要在其子视图中访问它,我只需再次设置环境变量,如下所示:

内容视图.swift

NavigationLink(destination: ProjectsView().environment(\.managedObjectContext, managedObjectContext)) {
    HStack {
        Image(systemName: "folder.fill")
        Text("Projects")
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦我删除了 ContentView 中的 .environment() 参数,应用程序就会崩溃,因为没有加载上下文?!

错误信息是Context in environment is …

swift watchkit swiftui

0
推荐指数
1
解决办法
2553
查看次数

标签 统计

swift ×1

swiftui ×1

watchkit ×1