SwiftUI List аварийно завершает работу при удалении выбранного элемента
У меня серьезная проблема с представлением списка SwiftUI в Xcode 12 (бета) (приложение MacOS).
Когда выбранный элемент списка удаляется, список каждый раз вылетает из строя.
"[Общие] Строка 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
}
})
}
}
}
1 ответ
Решение
Повторно протестировано после установки MacOS 11.0 Beta 7 (20A5374g). Код примера больше не вылетает, ошибка вроде исправлена.
Спасибо всем за тестирование и за подсказку, что это ошибка бета-версии MacOS.:-)