SwiftUI 列表,应用程序在其 NSTableView 委托中执行了可重入操作

SwiftUI list, Application performed a reentrant operation in its NSTableView delegate

提问人:Ilias Karim 提问时间:11/26/2022 更新时间:11/26/2022 访问量:653

问:

我正在尝试将数据附加到 SwiftUI 列表部分。当我在下面的示例代码中执行此操作时,控制台会显示一个警告,它预示着“将来将成为断言”。

struct ContentView: View {
  struct Rows: Hashable {
    let id: String
    let rows: [String]
  }

  @State var sections = [
    Rows(id: UUID().uuidString, rows: [])
  ]

  var body: some View {
    VStack {
      Button("Add Row") {
        let lastRows = sections.last!
        let rows = Rows(id: lastRows.id, rows: lastRows.rows + [UUID().uuidString])
        self.sections = [rows]
      }
      List {
        ForEach(sections, id: \.self) { exercise in
          Section(exercise.id) {
            ForEach(exercise.rows, id: \.self) { row in
              Text(row)
            }
          }
        }
      }
    }
  }
}

我到底做错了什么?

列出 macOS SwiftUI

评论

0赞 trinity420 3/1/2023
你想出解决方案了吗?'遇到同样的问题,我从带有闭包的不同线程更新它。
2赞 trinity420 3/4/2023
我想我发现了错误,它是“self.sections = [rows]”,您可以使用新条目更新状态变量部分,但不要为其分配另一个新引用,这会触发我的警告。
1赞 danneu 4/7/2023
哇,你为我节省了很多时间。感谢您回来报告。我已经慌张了好几个星期了。
0赞 aehlke 5/27/2023
天哪!!!!!!
0赞 Peter Lapisu 7/13/2023
您的意思是“您可以使用新条目更新状态变量部分,但不要为其分配另一个新引用”,例如不要使用 = 分配,而是在数组上使用突变函数?

答: 暂无答案