0

Xcode 12 (beta) (MacOS App) 中的 SwiftUI 列表视图存在严重问题。

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

“[常规] 第 2 行超出行范围 [0-1] 用于 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
                }
            })
        }
    }
}
4

1 回答 1

0

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

感谢所有人的测试,所以给了我提示,这是一个 MacOS beta 错误。:-)

于 2020-09-21T06:50:30.217 回答