【问题标题】:SwiftUI List crashes when removing a selected item删除所选项目时 SwiftUI 列表崩溃
【发布时间】:2020-12-30 18:42:33
【问题描述】:

我在 Xcode 12(测试版)(MacOS 应用程序)中的 SwiftUI 列表视图存在严重问题。

当一个被选中的列表项被移除时,列表每次都会崩溃。

"[General] 第 2 行超出行范围 [0-1] for rowViewAtRow:createIfNeeded:"

在我看来,这就像 SwiftUI 中的一个错误。我能做些什么来防止崩溃?我已经尝试了几件事,但都没有成功。

示例代码:

//
// Example to reproduce bug
// * Select no item or other than last item and press button: selection is reset, last item is removed, no crash
// * Select last list item and press button "Delete last item" => Crash
//

import SwiftUI

class MyContent: ObservableObject {
    @Published var items: [String] = []
    @Published var selection: Set<String> = Set()
    
    init() {
        for i in 1...5 {
            self.items.append(String(i))
        }
    }
}

struct MyView: View {
    @ObservedObject var content: MyContent = MyContent()
    
    var body: some View {
        VStack {
            List(content.items, id: \.self, selection: $content.selection) {
                item in
                Text("\(item)")
            }
            
            Button("Delete last item", action: {
                if content.items.count > 0 {
                    content.selection = Set()  // reset selection
                    var newItems = Array(content.items)
                    newItems.removeLast()
                    content.items = newItems
                }
            })
        }
    }
}

【问题讨论】:

  • Xcode 11.7 / macOS 10.15.6 不会崩溃。以防万一。
  • 要重现,您必须选择列表中的最后一项并点击删除按钮。在我的环境中,它 100% 肯定会崩溃。我在运行最新 MacOS Big Sur Beta(内部版本 20A5364e)的 Mac Book Air 上使用 Xcode 12 beta6。
  • 再次检查:我在 Xcode 中创建了一个新的、干净的 MacOS App 项目,将示例代码放入 ContentView.swift 并通过 MyView() 交换 App 中的 ContentView()。然后选择构建配置文件 MacOS 并开始。之后选择最后一个条目并点击删除按钮和 Boom,它崩溃了......
  • Did 2 Checks now: 1. MacOS 11 beta (20A5364e) + Xcode 11.7 => Crash 2. MacOS 10.15.6 + Xcode 11.7 => no Crash 这个错误显然在 MacOS 11 beta 中。 . 感谢您的帮助,即使还没有解决方案,但现在很清楚,这不是我的错... :-)
  • 已提交 Apple 错误报告 (FB8680646)...

标签: swiftui swiftui-list xcode12beta6


【解决方案1】:

安装 MacOS 11.0 Beta 7 (20A5374g) 后重新测试。 示例代码不再崩溃,错误似乎已修复。

感谢大家的测试并给我提示,这是一个 MacOS 测试版错误。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多