我制作了一个列表,其中包含绑定到 CoreData 实体的动态文本字段。由于我似乎无法弄清楚的原因,当更新 TextField 中的数据并对实体进行更新时,TextField 消失了。
我的第一个视图“ToolListView”遍历一个实体(与另一个实体相关)并调用另一个视图,显示每个项目。
例如: ToolboxEntity 包含工具列表(锤子、螺丝刀等),ToolEntity 包含有关该工具的信息(长度、材料等)
工具列表视图:
ForEach(toolboxTools) { tool in
ToolView(parent: tool, filter: tool.id.uuidString)
}
我的第二个视图“ToolView”请求有关所提供工具的信息并显示 DetailView,它显示 TextFields 以编辑实体属性 - 这是我遇到问题的地方。
工具视图:
struct ToolView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest var tools: FetchedResults<ToolEntity>
var parent: ToolboxEntity
init(
parent: ToolBox /* <- Just a struct with properties of the entity */,
filter: String
) {
self.parent = parent
_tools = FetchRequest(
sortDescriptors: [],
predicate: NSPredicate(format: "parent_tool_id == %@", filter)
)
}
var body: some View {
ForEach(tools) { tool in
DetailView(tool: tool)
}
}
}
struct DetailView: View {
@Environment(\.managedObjectContext) var moc
@ObservedObject var tool: ToolEntity
var body: some View {
TextField("", text: Binding(
get: { String(tool.length) },
set: {
tool.length = Int($0)!
}
))
}
}
我已经删除了实体绑定,只是用示例数据“asd”更新了实体,文本字段没有消失。这让我觉得问题特别在于实体的更新以及 ForEach 如何处理更新,但我不确定这些具体如何相互作用,所以我不确定。