Multi-document & auto-save

Voulant créer une app multi-document, j'ai crée une classe dérivant de UIDocument. Cette classe gère un NSMutableArray, représentant une liste d'éléments. Le but étant d'ajouter et/ou enlever des éléments à  mes documents, ma classe comprend les fonctions addElement/removeElement.


 


Bien entendu je désire que mon document soit sauvegardé automagiquement lorsque j'utilise ces deux fonctions. D'après la documentation, il y a deux façons de gérer ce mécanisme : implémenter undo/redo ou appeler updateChangeCount. J'ai choisit la seconde méthode, ne voyant pas l'intérêt de compliquer les choses avec undo/redo alors que mon app n'utilisera pas ce mécanisme.


 


J'ai donc l'appel suivant dans addElement/removeElement : [self updateChangeCount:UIDocumentChangeDone];.


 


Malheureusement, d'après mes tests, mon document n'est pas sauvegardé à  la suite de cet appel (à  la suite étant une façon de parler, bien entendu, je ne m'attends pas à  ce que la sauvegarde soit effectuée dans la seconde suivante) et seul [document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:nil]; sauvegarde mon document.


 


Avez vous des retours d'expérience sur l'utilisation de updateChangeCount? Ai-je oublié quelque chose?


 


Merci


 


Eric


 


Réponses

  • Salut Eric,


     


    pourquoi ne veux-tu pas utiliser 



    [document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:nil];

    ?


     


    C'est la bonne façon de sauvegarder ton document. 



    [self updateChangeCount:UIDocumentChangeDone]; 

    sert à  forcer le document à  être dans un état "non-saved" (et donc à  sauver). Il ne va pas le sauver. Juste, il sait qu'il doit le faire.


  • Merci pour la réponse.


     


    J'essaye de ne pas utiliser saveToURL car d'après la documentation d'Apple, UIDocument gère la sauvegarde automatiquement :


     



    Change Tracking

    To enable the autosaving feature of UIDocument, you must notify it when users make changes to a document.UIDocument periodically checks whether the hasUnsavedChanges method returns YES; if it does, it initiates the save operation for the document.


    There are two primary ways to implement change tracking in your UIDocument subclass:


    • - Call the methods of the NSUndoManager class to implement undo and redo for the document. You can access the default NSUndoManager object from the undoManager property. This is the preferred approach, especially for existing applications that already support undo and redo.
    • - Call the updateChangeCount: method at the appropriate junctures in your code.

     


    Je vais continuer mes tests, mais dans mon cas je n'ai pas l'impression que le mécanisme fonctionne...

  • OK NRico, mais as-tu vraiment un avantage à  ne pas utiliser saveToURL:... ?


  • Gérer manuellement la sauvegarde implique de gérer des cas comme : sauvegarde inutile et couteuse quand plusieurs modifications sont effectuées à  la suite, sauvegarder quand l'app passe en background, sauvegarder quand le document est fermé, ... Utiliser le système de sauvegarde automatique permet d'éviter de réécrire du code existant, et potentiellement inclure des oublis/bugs dans mon app.

Connectez-vous ou Inscrivez-vous pour répondre.