SwiftUI从CoreData设置初始Picker值

时间:2020-03-06 23:36:29

标签: ios core-data swiftui

我正在竭尽全力试图弄清楚如何使选择器显示已经存储的CoreData值。我希望它显示在选择器的右侧,就像用户刚刚选择它一样。我尝试在选择器之前添加IntoIterator来设置初始值,但是不会建立。我也尝试在self.updatedItemAttribute = self.editItem.attribute ?? ""中定义它(例如@State),但这也没有建立。如果我在选择器之前添加一个@State var updatedItemAttribute: String = self.editItem.attribute,它将设置该值,但是我不想拥有一个带有该值的TextField,只是为了设置它。关于如何在选择器之前将TextField设置为updatedItemAttribute的任何想法?谢谢。

editItem.attribute

1 个答案:

答案 0 :(得分:3)

您必须在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)
                        }
                    }
                }
            }
        }
    }
}