2016-01-14 3 views
0

Je reçois des résultats intermittents lors de la suppression. Parfois, les objets seront supprimés, mais la plupart du temps lorsque je redémarre le projet ou même directement après le code de suppression, le magasin tire toujours des instances des objets. Je suis en train de supprimer une référence à managedObjectContext à partir du AppDelegate et de m'assurer d'avoir sauvegardé la post-suppression.Données de base Supprimer ne fonctionne que par intermittence

if let object = getById(id, context: context){ 
     context.deleteObject(object) 
     do{ 
      print("Deleteing object by id") 
      try context.save() 
     }catch{ 
      print("Unable to delete object for some reason") 
     } 
    } 

Si je lance un getById() avec le même identifiant à nouveau juste après que je l'ai enregistré avec succès ma suppression, il trouve à nouveau l'objet. Le bloc d'erreur ne se déclenche jamais, alors je me dis qu'il y a quelque chose d'autre qui ne va pas ici. Des idées où regarder?

+0

À quoi ressemble votre fonction 'getById'? –

Répondre

1

Compris. La suppression fonctionnait toujours bien, le problème était que les identifiants que j'allais chercher dans ma méthode getById() n'étaient pas toujours uniques. Cela a provoqué la suppression intermittente parce que s'il y avait 7 objets avec id 1, qu'il y avait une chance de 1/7 le premier objet était en fait celui que je souhaitais être supprimé. Longue histoire courte, examinez le problème entier, et ne faites pas de suppositions sauf si vous êtes sûr dans mon cas ici, que le getById() retournait effectivement l'objet désiré.

2

Je pense que vous supprimez l'objet trouvé avant d'entrer dans la boucle do et le contexte.save() le sauvegarde. C'est probablement la raison pour laquelle le bloc Erreur ne se déclenche pas lorsque vous recherchez l'objet.

essayer -

if let object = getById(id, context: context) { 
    do { 
     try context.deleteObject(object) 
     try context.save() (I am still not sure if this statement should be there!!!) 
     print() 

}catch{ 
     print() 
} 
} 

espoir qui aide.

+0

Bonne idée, mais c'était quelque chose de simple et stupide de ma part, la suppression fonctionnait vraiment bien. – Unome

+0

Ce 'do' n'est pas une boucle, il est là pour que les erreurs puissent être détectées. Le bloc 'catch' ne s'exécuterait que si la méthode' save' renvoie une erreur. Et en ce qui concerne 'save()', comment le code enregistrerait-il des modifications s'il n'y était pas? –