[CoreData] Supprimer un objet d'un array

Bonjour,

J’ai commencé le cour sur coreData, bien que je n’ai pas encore tout bien compris j’ai essayer de le prendre en main pour un petit projet personnel.

En gros je sauve des objets dans un array mais je ne parviens pas du tout à supprimer ceux-ci et j’avoue ne pas savoir quoi faire …

J’ai utilisé le même code que @mbritto pour mettre à jour le toggle d’une tache pensant que ça marcherais de même pour une suppression mais pas du tout …

Une idée pour régler ça ?

Merci beaucoup !

As-tu essayé de créer un nouveau tableau avec un .filter ne retenant que les éléments différents de l’id à effacer ?

1 J'aime

Bonjour,
Je suis un peu dans le même cas que toi et j’essaye de me faire une petite application perso un peu plus compliquée que l’exemple de Maxime pour me faire la main.
Je rencontre quelques difficultés mais par contre j’avais réussi à faire cette suppression.
Au vu de ton code, j’ai l’impression que la suppression dans le tableau local fonctionne, mais que c’est la suppression dans la BDD CoreData qui ne fonctionne pas. C’est ça?
A+
Pascal

1 J'aime

C’est exactement ça que il ce passe en effet !

Je n’avais pas pensé à cette possibilité. Je m’y attaque tout de suite !

Il est bizarre ton code ! Tu effaces l’objet du tableau à un index donné et ENSUITE tu demandes à CoreData de mettre à jour l’objet avec le même index.

Dans ce cas, voici ce que j’ai fait:
Dans le management:

func deleteArticle (withId articleId:UUID) {
    if let indexArticle = groceryList.firstIndex(where: { (article) -> Bool in
        article.id == articleId
    }) {
        print ("ListManagement.deleteArticle id=\(articleId) indexArticle=\(indexArticle)")
        print ("deleteArticle \(groceryList [indexArticle].articleName)")
        groceryList.remove (at: indexArticle)
        storage.deleteArticle(withId: articleId)
    }
    else {
        print ("ListManagement.deleteArticle id=\(articleId) not found")
    }
}

et dans storage
func deleteArticle (withId id:UUID){
if let articleFounded = fetchCDArticleFromId(withId: id) {
print (« article trouvé : (articleFounded.articleName ?? « inconnu ») »)
self.context.delete(articleFounded)
saveDataInCoreData()
} else {
print (« pas trouvé id=(id) »)
}
}

J’espère que ça marchera
A+
Pascal

1 J'aime

Oui, je pensais que en fessant ça la base de donnée remarquerais que l’élément du tableau avait été supprimé et donc l’enlèverait.

Mais comme tu l’as fait remarqué ce que je pensais ne tient pas la route.

J’essaye tout de suite !

Bordel ça a marché !!

La solution était si évidente, j’aurais du me douter de l’existence d’une option .delete dans coreData.

Un tout grand merci !

Merci aussi à toi @Draken l’option .filter marche aussi dans ce que j’en ai lu sur internet (je ne sais juste pas encore l’utiliser je dois revoir la base de Swift je pense).

Pas de quoi. C’est vrai que la doc est mal foutue. J’ai trouvé cette solution sur un site en Anglais.
A bientôt sans doute.
Pascal

2 J'aimes