CoreData 更新时动态 TextField 消失

问题描述 投票:0回答:0

我制作了一个列表,其中包含绑定到 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 如何处理更新,但我不确定这些具体如何相互作用,所以我不确定。

swift swiftui core-data
© www.soinside.com 2019 - 2024. All rights reserved.