首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SwiftUI ViewModel中传递/获取核心数据上下文?

如何在SwiftUI ViewModel中传递/获取核心数据上下文?
EN

Stack Overflow用户
提问于 2020-09-18 17:02:25
回答 2查看 3.8K关注 0票数 7

上下文

要对核心数据对象执行性能操作,需要托管对象上下文managedObjectContext。当通过选中“使用核心数据”选项生成项目时,上下文将通过SceneDelegate中的环境变量传递到视图中(请参见下面)。一个相关的问题是Why does Core Data context object have to be passed via environment variable?

代码语言:javascript
复制
let contentView = MainView().environment(\.managedObjectContext, context)

但是,当我试图将context传递到视图模型时,它会抱怨如下

不能在属性初始化器中使用实例成员'context‘;属性初始化器在“self”可用之前运行

代码语言:javascript
复制
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()来初始化视图模型会导致不同的错误,导致生成失败。

未能为表达式生成诊断;请提交错误报告

代码语言:javascript
复制
    init() {
        self.viewModel = ViewModel(context: context)
    }

问题

那么,如何在视图模型中使用/ get /传递上下文呢?在视图模型中获取上下文的更好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-18 18:27:03

这是你的场景

代码语言:javascript
复制
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
    }
}
票数 9
EN

Stack Overflow用户

发布于 2020-09-27 14:39:13

CoreData上下文可以通过AppDelegate对象获取。

代码语言:javascript
复制
import SwiftUI

class ViewModel: ObservableObject {
    var context: NSManagedObjectContext
    
    init() {
        let app = UIApplication.shared.delegate as! AppDelegate
        self.context = app.persistentContainer.viewContext
    }
}

参考,https://kavsoft.dev/Swift/CoreData/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63959960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档