Изменение данных в SwiftUI OutlineGroup

Я пытаюсь использовать новый 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] [Общие] Ошибка NSOutlineView при вставке дочерних индексов <_NSCachedIndexSet: 0x600000760ea0>[количество индексов: 1 (в 1 диапазоне), индексы: (3)] в родительский 0x0 (у которого 1 дочерний элемент).

Как изменить модель дерева без сбоев?

0 ответов

Другие вопросы по тегам