Rob
Rob

Reputation: 777

Stock SwiftData App with NavigationSplitView for both iPhone and iPad support crashes when last item in the list is removed

I am running the boiler plate App created by Xcode using SwiftData and I am trying to support iPhone and iPad in the same view. I have NavigationSplitView with a List and inside that is a forEach with a .onDelete(perform:). Problem is when I delete the last item in the SwiftData database and tap done on the edit button the app crashes. Here is the view code:

import SwiftUI
import SwiftData

struct ContentView: View {
    @Environment(\.modelContext) private var modelContext
    @Query private var items: [Item]

    var body: some View {
        NavigationSplitView {
            List {
                ForEach(items) { item in
                    NavigationLink {
                        Text("Item at \(item.timestamp, format: Date.FormatStyle(date: .numeric, time: .standard))")
                    } label: {
                        Text(item.timestamp, format: Date.FormatStyle(date: .numeric, time: .standard))
                    }
                }
                .onDelete(perform: deleteItems)
            }
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    EditButton()
                }
                ToolbarItem {
                    Button(action: addItem) {
                        Label("Add Item", systemImage: "plus")
                    }
                }
            }
        } detail: {
            Text("Select an item")
        }
    }

    private func addItem() {
        withAnimation {
            let newItem = Item(timestamp: Date())
            modelContext.insert(newItem)
        }
    }

    private func deleteItems(offsets: IndexSet) {
        withAnimation {
            for index in offsets {
                modelContext.delete(items[index])
                            do {
                                    try modelContext.save()
                            } catch {
                                    print(error)
                            }

            }
        }
    }
}

#Preview {
    ContentView()
        .modelContainer(for: Item.self, inMemory: true)
}

The error is "Attempted to modify the selection of an item in an out-of-bounds section"

Using Xcode 15.4

Any help would be much appreciated!

Upvotes: 0

Views: 98

Answers (0)

Related Questions