1

J'ai une relation un à plusieurs entre deux entités de données principales.Traitement des erreurs de validation de relation CoreData

En dessous de A - B >>

A - >> B: Supprimer Deny (c.-à-Deny la suppression d'un alors que leurs objets sont de B)

B -> A: Nullify

Dans un contexte multiple, un contexte ignore les autres changements, dans ce cas, j'obtiens une erreur de validation lors de l'enregistrement du contexte parent, car dans un contexte, un enfant est inséré dans un parent qui supprime dans un autre contexte.

Leur peu ou pas d'informations sur la façon de gérer les erreurs de validation, la plupart des exemples montrent juste une erreur à l'utilisateur et rejettent les changements. Si je dois annuler la suppression de cet objet parent particulier puis-je?

Y at-il une option comment je peux gérer l'erreur de validation. NSValidationRelationshipDeniedDeleteError

+0

vous pouvez toujours suivre ce qui se passe dans d'autres contextes avec 'mergeChangesFromContextDidSaveNotification' –

Répondre

0

Je n'ai pas trouvé un moyen d'annuler la suppression pour seulement un certain objet sans perdre les modifications. Ainsi, si vous avez supprimé une entité parente dans un childContext, puis enregistré le childContext, l'entité supprimée est automatiquement ajoutée à parentContext.deletedObjects. J'ai essayé différentes approches mais la seule façon dont j'ai pu annuler l'opération de suppression du parentContext est d'appeler parentContext.refreshObject(deletedParent, mergeChanges: false). (pour sûr, vous pouvez essayer de restaurer ou de réinitialiser le contexte)

Cela dépend vraiment de ce que vous allez faire (donc l'entreprise a une grande influence ici!). Mais je pense que vous devriez travailler avec optimisme: https://en.wikipedia.org/wiki/Optimistic_concurrency_control Parfois, en cas de conflits, il est bon de revenir en arrière et de redémarrer les transactions.

Généralement, le childContext remplace les modifications du parentContext (l'enfant a une priorité plus élevée). Donc, l'architecture de votre application devrait fonctionner de la même manière. Lorsque vous supprimez une entité dans childContext, vous devez également la supprimer dans le parentContext, même si la règle de refus vous arrête parce que vous avez inséré une nouvelle entité enfant. Ce que vous devez faire est de supprimer les entités insérées, puis de supprimer l'entité parente. Sinon, vous devez réétudier l'architecture de l'application.