在SwiftUI大纲组中更改数据

在SwiftUI大纲组中更改数据,swiftui,swiftui-outlinegroup,Swiftui,Swiftui Outlinegroup,我正在尝试使用新的SwiftUIOutlineGroup来显示一个可扩展的树。我在我的应用程序的ContentView中尝试了这一点: struct ContentView: View { @EnvironmentObject var store: MyDataStore var body: some View { List { OutlineGroup(store.navRoot, children: \.children) { i

我正在尝试使用新的SwiftUI
OutlineGroup
来显示一个可扩展的树。我在我的应用程序的
ContentView
中尝试了这一点:

struct ContentView: View {

    @EnvironmentObject var store: MyDataStore

    var body: some View {
        List { 
            OutlineGroup(store.navRoot, children: \.children) { item in
                Text(item.name)
            }
        }
    }
尝试更改树数据的存储和命令处理程序的代码:

// Clicking menu button calls this
private func newProject() {
    var new = LeftNavNode(id: UUID(), name: "Foo")
    store.navRoot.children!.append(new)        
}   

...

class MyDataStore: ObservableObject {
    @Published var navRoot = LeftNavNode(id: projectsID, name: "Projects",
                                         children: [
                                            LeftNavNode(id: UUID(), name: "Project1"),
                                            LeftNavNode(id: UUID(), name: "Project2")
                                            ])
}

struct LeftNavNode: Identifiable {
    let id: UUID
    let name: String
    var children: [LeftNavNode]? = nil
}
它可以显示静态数据,但当我向树中添加一个项时,会出现一个错误。状态更改,视图重新渲染,我得到以下结果:

2020-09-20 15:08:24.991604-0400 MyArchives[32728:584579][General]NSOutlineView在父级0x0(有1个子级)中插入子索引[索引数:1(在1个范围内),索引:(3)]时出错


如何在不崩溃的情况下更改树模型?

这似乎是一个已知的错误。Big Sur Beta 8发行说明在“SwiftUI,已知问题”下写道:动态更新OutlineGroup内容可能无法正确更新或导致应用程序意外退出。这似乎是一个已知的错误。Big Sur Beta 8发行说明在“SwiftUI,已知问题”下写道:动态更新大纲组内容可能无法正确更新或导致应用程序意外退出。