Absturz beim Löschen von Realm-Daten, die von Swift aufgelistet werden: Index 1 ist außerhalb der Grenzen

Zeigen Sie die in Realm gespeicherten Daten als Liste an. Ich möchte in der Lage sein, jede Zelle anzuzeigen, zu bearbeiten und zu löschen.

Ich dachte, aber jedes Mal, wenn ich es lösche Index 1 ist außerhalb der Grenzen (muss kleiner als 1 sein) und abgestürzt. Ich habe lange Zeit auf verschiedene englische Sätze Bezug genommen, aber ich konnte es nicht lösen.

Ich habe es nach langer Zeit nachgeschlagen und dieser Artikel hat mich gerettet. https://llcc.hatenablog.com/entry/2020/04/26/205254

Das Verständnis eines Neulings wie mir ist, dass Sie, um eine Liste zu erhalten, direkt zu Realm gehen, um die Daten zu erhalten. Erstellen Sie dieses Mal ein Ansichtsmodell für die Zelle der Liste. Erstellen Sie ein Ansichtsmodell für die gesamte Ansicht. Holen Sie sich über ViewModel, um eine Liste zu erhalten,

ForEach(model.myModels, id: .id) ↓ ForEach(model.cellModels, id: .id) Keine gelöschten oder nicht vorhandenen Daten mehr

Der Inhalt ist wie folgt:

private var token: NotificationToken?
    private var myModelResults = try? Realm().objects(MyModel.self)
    @Published var myModels: [MyModel] = []
    
    init() {
        token = myModelResults?.observe { [weak self] _ in
            self?.myModels = self?.myModelResults?.map { $0 } ?? []
        }
    }
    
    deinit {
        token?.invalidate()
    }
ForEach(model.myModels, id: \.id) 

Gewechselt zu

private var token: NotificationToken?
    private var myModelResults = try? Realm().objects(MyModel.self)
    @Published var cellModels: [ContentViewCellModel] = []
    
    init() {
        token = myModelResults?.observe { [weak self] _ in
            self?.cellModels = self?.myModelResults?.map { ContentViewCellModel(id: $0.id, title: $0.title) } ?? []
        }
    }
    
    deinit {
        token?.invalidate()
    }
ForEach(model.cellModels, id: \.id)  

Auf diese Weise wurde der Fehler sauber behoben.

Recommended Posts

Absturz beim Löschen von Realm-Daten, die von Swift aufgelistet werden: Index 1 ist außerhalb der Grenzen
LIMIT 11, wenn Daten mit irb erfasst werden
[Swift] Ermittelt das Timing, wenn der Wert von textField geändert wird