Core data 使用observedobject更新核心数据实体

Core data 使用observedobject更新核心数据实体,core-data,swiftui,observedobject,Core Data,Swiftui,Observedobject,我已经创建了一个保存在核心数据中的客户列表。我通过AddView添加了一些属性,现在我尝试使用不同的视图添加新属性。为了做到这一点,我知道我需要使用observedObject属性包装器,这样它就不会创建新的客户机,而是更新现有的客户机。代码如下: import SwiftUI import CoreData struct TopicView: View { @Environment(\.managedObjectContext) var managedObjectContext @Env

我已经创建了一个保存在核心数据中的客户列表。我通过AddView添加了一些属性,现在我尝试使用不同的视图添加新属性。为了做到这一点,我知道我需要使用observedObject属性包装器,这样它就不会创建新的客户机,而是更新现有的客户机。代码如下:

import SwiftUI
import CoreData

struct TopicView: View {


@Environment(\.managedObjectContext) var managedObjectContext
@Environment (\.presentationMode) var presentationMode
@ObservedObject var topic: StudentData
@State var content = ""
@State private var show = false
@StateObject private var keyboard = Keyboard()

var body: some View {
Form{
            Section (header: Text("Topics covered")
                        .bold()
                        .padding(.all)
                        .font(.title3)) {
        

TextEditor(text: Binding(
                            get: {self.topic.content ?? ""},
                            set: {self.topic.content = $0 } ))
                    .frame(height: 250)
                    
    }
                 }.onTapGesture {
                    hideKeyboard()
                }
               }
             }
             Button ("Submit")
                 {
                    self.topic.content = self.content
                    self.topic.objectWillChange.send()

                    try? self.managedObjectContext.save()
                    self.presentationMode.wrappedValue.dismiss()
               }.foregroundColor(.white)
这是应显示新属性的视图:

    import SwiftUI
import CoreData
import MapKit

struct StudentView: View {
    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(entity: StudentData.entity(),
        sortDescriptors: [],
        animation: .spring())  var content: FetchedResults<StudentData>
    @Environment (\.presentationMode) var presentationMode
    @ObservedObject var topic: StudentData
    @State var showModalView = false
    @State private var showingSheet = false
    
    let myStudent: StudentData
  
var body: some View {
    
        NavigationView {
VStack{
                    Text("Topics Covered")
                        .font(.system(size: 30, weight: .bold, design: .rounded))
                        .foregroundColor(.red)
                        .padding(.horizontal)
                   Text("\(myStudent.content ?? "")")
                    .font(.title2)
                    .bold()
                    .foregroundColor(.white)
                    .padding(.horizontal) }}
                Spacer()
                Spacer()
}.sheet(isPresented: $showModalView, content: {
            TopicView(topic: topic)})
导入快捷界面
导入CoreData
导入地图套件
struct StudentView:View{
@环境(\.managedObjectContext)变量managedObjectContext
@FetchRequest(实体:StudentData.entity(),
sortDescriptors:[],
动画:.spring())变量内容:FetchedResults
@环境(\.presentationMode)变量presentationMode
@观察对象变量主题:StudentData
@状态变量showModalView=false
@状态私有变量显示表=false
让我的学生:学生数据
var body:一些观点{
导航视图{
VStack{
案文(“所涉主题”)
.font(.system(大小:30,重量:粗体,设计:四舍五入))
.foregroundColor(.red)
.padding(.卧式)
文本(\(myStudent.content??))
.font(.title2)
.bold()
.foregroundColor(.白色)
.padding(.horizontal)}
垫片()
垫片()
}.sheet(显示:$showModalView,内容:{
主题视图(主题:主题)})
问题是,如果我在文本编辑器中键入一些文本而不保存它,那么它会正确地显示在另一个视图中。但是,当我保存它时,它不会显示在另一个视图中。
我的保存代码有什么问题吗?

提交时不要创建newStudent。只需保存上下文谢谢,我已更新了保存按钮。它现在不会创建新客户端,但在我提交时,它不会更新核心数据。请提供任何指针?这有什么意义?
如果愿意,让我的学生:StudentData
查看更改您必须将其包装在一个
@ObservedObject
中这一行清除您的内容self.topic.content=self.content摆脱该状态变量它不做任何事情只处理CoreData对象谢谢,这很有效。我不确定这一行,但我在另一篇文章中找到了它,所以我认为应该包括在内。