Core data 使用observedobject更新核心数据实体
我已经创建了一个保存在核心数据中的客户列表。我通过AddView添加了一些属性,现在我尝试使用不同的视图添加新属性。为了做到这一点,我知道我需要使用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
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对象谢谢,这很有效。我不确定这一行,但我在另一篇文章中找到了它,所以我认为应该包括在内。