我有一个简单的布局,我想在其中创建一个类别列表和一个项目列表。对于每个项目,我希望它使用一个选择器来确定它属于哪个类别。例如,如果“苹果”是一个项目,我希望它列在“水果”类别下。我希望底部的列表显示该项目及其所属的类别。所以这个会说“苹果水果”。出于某种原因,我认为选择器没有绑定,当我单击保存时它只显示项目,而不显示它属于哪个类别。选择器列表确实显示了我添加的所有类别,但我认为它没有绑定到 categoryString 变量。有什么帮助吗?这也有一些核心数据的东西,但为了简化理解正在发生的事情,我已经删除了一些。
struct CopyOfItemsView: View {
private var listedItem: FetchedResults<Item>
private var listedCategory: FetchedResults<Category>
@State var categoryString: String = ""
@State var nameString: String = ""
var body: some View {
VStack {
// add new category
TextField("Enter Text Here", text: $categoryString)
Button {
let newlistedCategory = Category(context: viewContext)
newlistedCategory.categoryString = categoryString
save()
categoryString = ""
} label: {
Text("Save")
}
// add new item
TextField("Enter Text Here", text: $nameString)
Picker("category", selection: $categoryString) {
ForEach(listedCategory) { listedCategory in
Text(listedCategory.categoryString!)
}
}
Button {
let newlistedItem = Item(context: viewContext)
newlistedItem.nameString = nameString
newlistedItem.categoryString = categoryString
save()
nameString = ""
categoryString = ""
} label: {
Text("Save")
}
// list
ForEach(listedItem) { listedItem in
HStack {
Text(listedItem.nameString ?? "")
Text(listedItem.categoryString ?? "")
}
}
}
}
private func save() {
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
你需要
tag
Picker("category", selection: $categoryString) {
ForEach(listedCategory) { listedCategory in
Text(listedCategory.categoryString!)
.tag(listedCategory.categoryString!)
}
}