Crash lors de la suppression des données de domaine répertoriées par swift: l'index 1 est hors limites

Afficher les données enregistrées dans Realm sous forme de liste, Je veux pouvoir afficher, modifier et supprimer chaque cellule.

J'ai pensé, mais à chaque fois que je le supprime L'index 1 est hors limites (doit être inférieur à 1) et s'est écrasé. J'ai fait référence à diverses phrases en anglais pendant longtemps, mais je n'ai pas pu le résoudre.

Je l'ai recherché après un long moment et cet article m'a sauvé. https://llcc.hatenablog.com/entry/2020/04/26/205254

La compréhension d'un nouveau venu comme moi est que pour obtenir une liste, vous allez directement au royaume pour obtenir les données. Cette fois, créez un modèle de vue pour la cellule de la liste, créez un modèle de vue pour la vue entière, Obtenez via ViewModel pour obtenir une liste,

ForEach(model.myModels, id: .id) ↓ ForEach(model.cellModels, id: .id) Plus aucune donnée supprimée ou inexistante

Le contenu est comme ceci:

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) 

Changé en

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)  

En faisant cela, l'erreur a été résolue proprement.

Recommended Posts

Crash lors de la suppression des données de domaine répertoriées par swift: l'index 1 est hors limites
LIMIT 11 lorsque les données sont acquises avec irb
[Swift] Obtenez le moment où la valeur de textField est modifiée