[AutoSave] sur NSDocument et NSTableView eventuellement

GercofisGercofis Membre
19:23 modifié dans API AppKit #1
Soit un projet based Document classique,
Ou et comment j'utilise AutoSave, j'ai donné un nom a la fenetre dans IB...
J'ai lu aussi ici que je pouvais faire la même chose sur le NSTableView présent dans cette fenetre, si des fois les donnés étaient stockées aussi?
Merci

Réponses

  • Eddy58Eddy58 Membre
    19:23 modifié #2
    L'autosave, pour une fenêtre, enregistre automatiquement la frame de ta fenêtre lorsque tu la déplaces ou la redimensionnes. Pour une tableview, je n'ai jamais utilisé, mais avec setAutoSaveTableColumns, tu peux enregistrer automatiquement l'ordre et les largeurs des colonnes. :)
  • GercofisGercofis Membre
    19:23 modifié #3
    Alors modifions la question comment celle-ci est restituée, comment je la relis a la réouverture de mon document, actuellement c'est reouvert aux dimentions d'IB....
    :-\\
  • aranaudaranaud Membre
    19:23 modifié #4
    dans 1113213597:

    L'autosave, pour une fenêtre, enregistre automatiquement la frame de ta fenêtre lorsque tu la déplaces ou la redimensionnes. Pour une tableview, je n'ai jamais utilisé, mais avec setAutoSaveTableColumns, tu peux enregistrer automatiquement l'ordre et les largeurs des colonnes. :)


    Donc, si je comprend bien, ça n'enregistre que l'interface mais pas les données.
  • Eddy58Eddy58 Membre
    19:23 modifié #5
    dans 1113234081:

    Alors modifions la question comment celle-ci est restituée, comment je la relis a la réouverture de mon document, actuellement c'est reouvert aux dimentions d'IB....
    :-\\

    Bon, mauvaise nouvelle de ce côté là , les fenêtres d'applis multi-documents ne sauvegardent pas leur frame...:( Je l'ai pas lu dans la doc officielle, mais lu dans Cocoa Programming : "Document windows shouldn't save their frames in the user's defaults database. If every window saves its frame, the defaults database will become very large, and users have no easy way to remove window frames from their defaults database."


    Donc, si je comprend bien, ça n'enregistre que l'interface mais pas les données.

    Oui, tout à  fait, il serait en effet contraire au MVC design pattern qu'un objet de la couche View puisse recouvrir des fonctions d'un objet de la couche Model. :)
  • GercofisGercofis Membre
    19:23 modifié #6
    >:)

    Une telle réponse me surprend, si je traduis, bien qu'un peu (même beaucoup!) fâché avec l' Anglais la remarque dit que l'utilisateur ne peut sauvegarder les données de ses fenetres documents dans les préférences utilisateurs, ce qui prendait une taille un peu énorme et aucun moyen simple pour retrouver celle-ci...

    Mais pour une fenetre de préférence ça marche très bien et la methode suivante
    [myWindow setFrameAutosaveName:@My Window];
    suffit
    Est-ce que ça fait double emploie avec l'inscription dans la zone AutoSave de IB ?
  • ClicCoolClicCool Membre
    19:23 modifié #7
    pour forcer une fenêtre à  adapter sa frame enregistrée dans les prefs sous un non: @myWindow
    <br />	[window setFrameUsingName:@&quot;myWindow&quot; force:YES];
    


    force: YES est falcultatif, il impose l'éventuel redimensionnement (en plus de la position) même pour une fenêtre déclarée comme non redimensionable.

    Pour ce qui est des fenêtres de documents c'est faisable aussi mais:
    - tu shuntes alors le windowManager qui normalement s'éfforce de disposer chaque fenêtre de document avec un léger décalage par apport à  la précédente (c'est l'usage et c'est bien commode le plus souvent).
    - Si tu veux enregistrer une position/dimension de fenêtre en fonction de chaque document, il faudrait donner un nom d'autosave différent pour chacun et surtout ça va rapidement être le merdier dans les prefs. Le mieux étant dans ce cas d'inclure la frame mémorisée dans l'entête de ton fichier document et de la restituer à  la main (simple) à  la lecture des documents. Le tout en fichant la paix aux fenêtres des nouveaux documents pour qu'elles gardent la frame par défaut définie dans IB.
Connectez-vous ou Inscrivez-vous pour répondre.