Il y a vraiment deux réponses à cette question. Le premier est plus philosophique: dans la plupart des cas, vous voulez que les mises à jour du modèle se produisent instantanément. Pour la plupart, les utilisateurs ne devraient pas avoir à s'inquiéter de l'enregistrement, de l'enregistrement, etc. L'intégration omniprésente de Binding avec NSUndoManager
signifie que tout ce que fait l'utilisateur peut être annulé (ou devrait être annulable). Toutes les actions de l'utilisateur doivent être «à faible risque», de sorte qu'une modification puis une annulation ne causent pas de «préjudice» inutile aux données de l'utilisateur ou à l'état de l'application. Si vous utilisez des données de base pour votre couche de modèle, vous pouvez toujours restaurer ou enregistrer un ensemble de modifications par programmation en utilisant les méthodes de NSManagedObjectContext
. À moins qu'il n'y ait un vraiment bonne raison pour laquelle l'utilisateur a besoin d'un bouton "Soumettre", n'en mettez pas. Conformément à cette philosophie, la fonctionnalité "Annuler Envoyer" de Gmail. Même envoyer un email devrait être annulable (dans des limites raisonnables).
La deuxième réponse est plus pratique. Bien sûr, il y a des situations où vous avez affaire à un système de backend qui n'est pas aussi tolérant que celui de Cocoa. Dans ce cas, la meilleure option consiste à créer un objet de modèle temporaire qui sert de modèle pour l'interface utilisateur (pensez à un modèle de vue dans l'architectore MVVM (Model-View-View-Model)). Lorsque l'utilisateur soumet les modifications, vous pouvez copier l'objet de modèle temporaire dans le modèle persistant. Dans Données de base, vous pouvez utiliser un magasin persistant en mémoire sauvegardant un contexte d'objet géré distinct pour contenir ces instances temporaires, puis fusionner les modifications de ce contexte temporaire dans votre contexte principal sur submit.