呈现工作表时 EnvironmentObject 不起作用

Posted

技术标签:

【中文标题】呈现工作表时 EnvironmentObject 不起作用【英文标题】:EnvironmentObject does not work when sheet is presented 【发布时间】:2019-11-30 04:58:09 【问题描述】:

我有一个包含 managedObjectContext(环境变量)的视图。当使用 NavigationLink 在 NavigationView 中呈现时,它可以正常工作。但是当视图显示为工作表时,它不起作用。 当我保存一些实体数据时,它给了我一个错误。

“操作无法完成。(Foundation._GenericObjCError 错误 0.)”

使用 Environment 对象时有什么我遗漏的吗?我的代码

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

@Environment(\.managedObjectContext) var managedObjectContext

【问题讨论】:

【参考方案1】:

工作表不是ContentView 的子组件。

因此,您必须将此环境单独传递给工作表:

.sheet(isPresented: self.$isPresented, content: MySheetView().environment(\.self.moc)

moc 在 View 中定义为:

@Environment(\.managedObjectContext) var moc

【讨论】:

以上是关于呈现工作表时 EnvironmentObject 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

@EnvironmentObject 符合协议:Xcode 未编译

对 SwiftUI 中的 @EnvironmentObject 感到困惑

使用 SwiftUI 时尝试在视图中显示工作表时应用程序崩溃

将数据从委托 Swift 类传递到 SwiftUI 结构中的 EnvironmentObject

SwiftUI @EnvironmentObject:未找到?

ObjectBinding 和 EnvironmentObject 有啥区别?