上下文
要对核心数据对象执行性能操作,需要托管对象上下文managedObjectContext。当通过选中“使用核心数据”选项生成项目时,上下文将通过SceneDelegate中的环境变量传递到视图中(请参见下面)。一个相关的问题是Why does Core Data context object have to be passed via environment variable?
let contentView = MainView().environment(\.managedObjectContext, context)但是,当我试图将context传递到视图模型时,它会抱怨如下
不能在属性初始化器中使用实例成员'context‘;属性初始化器在“self”可用之前运行
struct MainView: View {
@Environment(\.managedObjectContext) var context
// Computed property cannot be used because of the property wrapper
@ObservedObject var viewModel = ViewModel(context: context)
}
class ViewModel: ObservableObject {
var context: NSManagedObjectContext
}在视图中添加一个init()来初始化视图模型会导致不同的错误,导致生成失败。
未能为表达式生成诊断;请提交错误报告
init() {
self.viewModel = ViewModel(context: context)
}问题
那么,如何在视图模型中使用/ get /传递上下文呢?在视图模型中获取上下文的更好方法是什么?
发布于 2020-09-18 18:27:03
这是你的场景
let contentView = MainView(context: context) // << inject
.environment(\.managedObjectContext, context)
struct MainView: View {
@Environment(\.managedObjectContext) var context
@ObservedObject private var viewModel: ViewModel // << declare
init(context: NSManagedObjectContext) {
self.viewModel = ViewModel(context: context) // initialize
}
}发布于 2020-09-27 14:39:13
CoreData上下文可以通过AppDelegate对象获取。
import SwiftUI
class ViewModel: ObservableObject {
var context: NSManagedObjectContext
init() {
let app = UIApplication.shared.delegate as! AppDelegate
self.context = app.persistentContainer.viewContext
}
}https://stackoverflow.com/questions/63959960
复制相似问题