Ark*_*yyn 2 core-data ios swiftui
我正在绞尽脑汁地试图弄清楚如何让我的选择器显示已经存储的 CoreData 值。我希望它显示在选择器的右侧,就像用户刚刚选择它一样。我尝试self.updatedItemAttribute = self.editItem.attribute ?? ""在选择器之前添加以设置初始值,但这不会构建。@State我也尝试在(eg )中定义它,@State var updatedItemAttribute: String = self.editItem.attribute但这也不能构建。如果我在选择器之前添加 a TextField,它将设置该值,但我不希望有一个TextField带有该值的值只是为了让它设置。关于如何在选择器之前updatedItemAttribute进行设置有什么想法吗?editItem.attribute谢谢。
import CoreData
import SwiftUI
struct EditItemView: View {
@Environment(\.managedObjectContext) var moc
@Environment(\.presentationMode) var presentationMode
@ObservedObject var editItem: Item
@State var updatedItemName: String = ""
@State var updatedItemAttribute: String = ""
let attributes = ["Red", "Purple", "Yellow", "Gold"]
var body: some View {
NavigationView {
Form {
Section {
TextField("Name of item", text: $updatedItemName)
.onAppear {
self.updatedItemName = self.editItem.name ?? ""
}
Picker("Test attribute", selection: self.$updatedItemAttribute) {
ForEach(attributes, id: \.self) {
Text($0)
.onAppear {
self.updatedItemAttribute = self.editItem.attribute ?? ""
}
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
你必须在 init 中这样做,如下所示
struct EditItemView: View {
@Environment(\.managedObjectContext) var moc
@Environment(\.presentationMode) var presentationMode
@ObservedObject var editItem: Item
@State private var updatedItemName: String
@State private var updatedItemAttribute: String
init(editItem item: Item) { // << updated here
self.editItem = item
self._updatedItemName = State<String>(initialValue: item.name ?? "")
self._updatedItemAttribute = State<String>(initialValue: item.attribute ?? "")
}
let attributes = ["Red", "Purple", "Yellow", "Gold"]
var body: some View {
NavigationView {
Form {
Section {
TextField("Name of item", text: $updatedItemName)
Picker("Test attribute", selection: self.$updatedItemAttribute) {
ForEach(attributes, id: \.self) {
Text($0)
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2800 次 |
| 最近记录: |