У меня есть список FetchedResults, и я выбираю объект из этого FetchedResults с помощью Picker, но не знаю, как сохранить этот объект. Я получаю список объектов из сущности CoreData через FetchedRequest в переменной listOfPolymers. Теперь я хочу выбрать один объект в качестве родительского семейства, но я не могу найти способ, как выбрать выбранный объект из Picker. Если я использую тип объекта в средстве выбора, он выдает ошибку, поскольку объект привязки должен быть передан из представления, из которого я перехожу к этому представлению, но у меня нет возможности передать этот объект из этого представления. Вот мой код:
struct Polymer: View {
@Environment(\.managedObjectContext) var mocPolymer
@FetchRequest(entity: AECPolymer.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \AECPolymer.name, ascending: true)]) var listOfPolymers: FetchedResults<AECPolymer>
@State var toAddPolymerName: String = ""
@State var toAddPolymerShortName: String = ""
@State var addPolymer: Bool = false
@State var parentPolymerName: String = "Select"
@State var hasParent: Bool = false
var body: some View {
List {
if addPolymer {
Section(header: Text("Add Polymer")) {
TextField("Name", text: $toAddPolymerName)
TextField("Short Name", text: $toAddPolymerShortName)
Toggle(isOn: $hasParent) {
Text("Belongs to a Parent Polymer Family?")
}
VStack {
if hasParent {
Picker(selection: $parentPolymerName, label: EmptyView()) {
ForEach(listOfPolymers, id: \.self) {(parent: AECPolymer) in
Text(parent.name ?? "Unknown")
}
}
} else {
EmptyView()
}
}
if self.toAddPolymerName.isEmpty || self.toAddPolymerShortName.isEmpty {
EmptyView()
} else {
Button(action: {
let toAddPolymer = AECPolymer(context: self.mocPolymer)
toAddPolymer.name = self.toAddPolymerName
toAddPolymer.shortName = self.toAddPolymerShortName
let selectedParentPolymerName = self.parentPolymerName
if let parentPolymer = self.listOfPolymers.first(where: { "name == @%", selectedParentPolymerName }) {
toAddPolymer.polymerFamily = parentPolymer
}
do {
try self.mocPolymer.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
self.toAddPolymerName = ""
self.toAddPolymerShortName = ""
self.addPolymer.toggle()
}, label: {
Text("Save")
}).buttonStyle(BorderlessButtonStyle())
}
}
} else {
EmptyView()
}
Section(header: Text("Polymers")) {
if self.listOfPolymers.count != 0 {
ForEach(listOfPolymers, id: \.self) {(polymer: AECPolymer) in
VStack(alignment: .leading) {
Text(polymer.name ?? "Unknown")
Text("(\(polymer.shortName ?? "Unknown"))").font(.footnote)
}
}
} else {
Text("List is empty...")
}
}
}.navigationBarTitle("List")
.navigationBarItems(trailing: Button(action: {
self.addPolymer.toggle()
}, label: {
if self.addPolymer {
Text("Cancel")
} else {
Image(systemName: "plus.circle.fill")
.imageScale(.large)
}
}))
}
}
может кто-нибудь помочь, как мне получить объект, который пользователь выбирает из сборщика ...