SwiftUI 中的核心数据观察对象
Core Data observed object in SwiftUI
我创建了一个保存在核心数据中的客户列表。我通过 AddView 添加了一些属性,现在我正在尝试使用不同的视图添加新属性。为了做到这一点,我知道我需要使用 observedObject 属性 包装器,这样它就不会创建新客户端,而是更新现有客户端。这是代码:
import SwiftUI
import CoreData
struct TopicView: View {
@Environment(\.managedObjectContext) var managedObjectContext
let myStudent: StudentData
@ObservedObject var topic: StudentData
@State var content = ""
@State private var show = false
var body: some View {
Section (header: Text("Topics covered")
.bold()
.padding(.all)
.font(.title3)) {
TextField("Add content", text: $topic.content ?? "") //error here
//Text(topic.content ?? "")
.padding()}
Button ("Save")
{ let newStudent = StudentData(context: self.managedObjectContext)
newStudent.content = self.topic.content
try? self.managedObjectContext.save()
self.topic.content = ""
}.foregroundColor(.blue)
.cornerRadius(10)
.frame(width: 200, height: 50, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
.font(.headline)
Spacer()
}
}
我收到两条错误消息:
无法将类型 'Binding<String?>' 的值转换为预期的参数类型 'Binding'
和
无法将类型 'String' 的值转换为预期的参数类型 'Binding<String?>'
这可能是一个简单的解决方法,但由于我仍在学习,所以我无法理解它。
谢谢
谢谢大家,
这是我发现的并且似乎有效:
TextField("Add content", text: Binding(
get: { self.topic.content ?? ""},
set: { self.topic.content = [=10=] } )
)
我创建了一个保存在核心数据中的客户列表。我通过 AddView 添加了一些属性,现在我正在尝试使用不同的视图添加新属性。为了做到这一点,我知道我需要使用 observedObject 属性 包装器,这样它就不会创建新客户端,而是更新现有客户端。这是代码:
import SwiftUI
import CoreData
struct TopicView: View {
@Environment(\.managedObjectContext) var managedObjectContext
let myStudent: StudentData
@ObservedObject var topic: StudentData
@State var content = ""
@State private var show = false
var body: some View {
Section (header: Text("Topics covered")
.bold()
.padding(.all)
.font(.title3)) {
TextField("Add content", text: $topic.content ?? "") //error here
//Text(topic.content ?? "")
.padding()}
Button ("Save")
{ let newStudent = StudentData(context: self.managedObjectContext)
newStudent.content = self.topic.content
try? self.managedObjectContext.save()
self.topic.content = ""
}.foregroundColor(.blue)
.cornerRadius(10)
.frame(width: 200, height: 50, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
.font(.headline)
Spacer()
}
}
我收到两条错误消息: 无法将类型 'Binding<String?>' 的值转换为预期的参数类型 'Binding' 和 无法将类型 'String' 的值转换为预期的参数类型 'Binding<String?>'
这可能是一个简单的解决方法,但由于我仍在学习,所以我无法理解它。 谢谢
谢谢大家, 这是我发现的并且似乎有效:
TextField("Add content", text: Binding(
get: { self.topic.content ?? ""},
set: { self.topic.content = [=10=] } )
)