为啥 Core Data 上下文对象必须通过环境变量传递?
Posted
技术标签:
【中文标题】为啥 Core Data 上下文对象必须通过环境变量传递?【英文标题】:Why does Core Data context object have to be passed via environment variable?为什么 Core Data 上下文对象必须通过环境变量传递? 【发布时间】:2020-09-18 18:01:22 【问题描述】:在SceneDelegate
内部,上下文是通过.environment(\.managedObjectContext, context)
传递的,为什么不能通过View 的属性传递呢?这样做有什么好处?
所以不要在下面做
let contentView = FlightsEnrouteView()
.environment(\.managedObjectContext, context)
我们可以通过视图的初始化器传递上下文
let contentView = FlightsEnrouteView(context: context)
所以里面FlightsEnrouteView
应该是,
struct FlightsEnrouteView: View
var context: NSManagedObjectContext
测试它并编译
【问题讨论】:
【参考方案1】:为什么不能通过 View 的属性传递?这样做有什么好处?
可以。只是它被环境中的@FetchRequest
等其他包装器使用,但没有人阻止你组合它们,因为上下文是引用类型的对象,所以你可以随意传递它的引用。
所以以下是绝对有效的:
let contentView = FlightsEnrouteView(context: context)
.environment(\.managedObjectContext, context)
和
struct FlightsEnrouteView: View
@EnvironmentObject(\.managedObjectContext) var envContext
var context: NSManagedObjectContext
【讨论】:
以上是关于为啥 Core Data 上下文对象必须通过环境变量传递?的主要内容,如果未能解决你的问题,请参考以下文章
如果您想通过 Core Data 使用多个实体,您需要为每个实体提供一个托管对象上下文吗?
如何使用 Core Data 设置 NSArrayController?
当应用程序后台运行时,Core Data 无法通过区域监控保存上下文