Изменение данных в 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)
}
}
}
![](/images/9f018b5ea7250fdf5dc1a4d8b6555e7366b6a5c8.png)
Код хранилища и обработчика команд, который пытается изменить данные дерева:
// 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 дочерний элемент).
Как изменить модель дерева без сбоев?