Informer le délégué pour enregistrer

muqaddarmuqaddar Administrateur
11:57 modifié dans API AppKit #1
Salut,

J'ai un petit soucis concernant l'enregistrement de mes champs. Dans mon appli, si j'enregistre Pomme-S, tout se sauvegarde, aucun pb. En revanche, si je modifie un champ (textView ou textField), et que je ne change pas de first responder, cette méthode n'est plus efficace quand je quitte l'appli sans enregistrer :

- (NSApplicationTerminateReply)applicationShouldTerminate:(id)sender<br />{<br />        BOOL saveResult = [self mamethodedenregistrement];<br />        if (saveResult) {<br />         return NSTerminateNow; <br />   }<br />}


Je voudrais donc informer et enregistrer mes modifs autrement. J'ai bien essayé ceci :
- (void)textDidChange:(NSNotification *)notification<br />{<br />     BOOL saveResult = [self mamethodedenregistrement];<br />}


mais ça ne marche pas non plus. Sinon, j'ai encore moyen d'afficher un panneau d'alerte qd j'ai fais des modifs au moment de quitter comme la plupart des programmes, mais comment ?

Réponses

  • TiffTiff Membre
    11:57 modifié #2
    Tu voudrais que ton appli sauve tes données à  chaque fois que tu appuies sur une touche ?
    Bizarre que ça ne fonctionne pas, t'as essayé de mettre un NSLog pour voir si textDidChange est vraiment appelé ?

    Avec textShouldEndEditing, ça ne fonctionne pas non plus ?
  • muqaddarmuqaddar Administrateur
    11:57 modifié #3
    Je vais tester ça Tiff, merci de t' y être attardé ;-)
  • ClicCoolClicCool Membre
    11:57 modifié #4
    Oups, j'avais pas vu ce sujet. :(

    Il semble que tu n'ai pas choisi, dans ton binding, "continuously update value" et "validate imméditatly".
    Le champ en cours d'édition n'est donc effectivement pris en compte que à  la fin de l'édition, c'est à  dire quand il perd le focus (et n'est plus first responder comme tu l'a remarqué).
    En ajoutant ces options, les changements sont appliquer aux données sources au fur et à  mesure des entrées du clavier.

    Ces options se définissent par les boites à  cocher sous I.B. ou par le dictionnaire d'options transmis lors d'un binding à  la volée.
    Pour en savoir plus sur les options que l'on peut utiliser dans ce dico vas voir là : Bindings Références / Binding Options :)
  • muqaddarmuqaddar Administrateur
    11:57 modifié #5
    Merci à  vous deux :

    NSMutableDictionary *updateOptions = [NSMutableDictionary dictionary];<br />&nbsp; &nbsp; [updateOptions setObject:[NSNumber numberWithBool:YES] forKey:@&quot;NSContinuouslyUpdatesValue&quot;];
    


    Et le tour est joué. :-)
  • TiffTiff Membre
    11:57 modifié #6
    dans 1095755898:

    En revanche, si je modifie un champ (textView ou textField), et que je ne change pas de first responder, cette méthode n'est plus efficace quand je quitte l'appli sans enregistrer


    Bizarre, comme je le disais ici ce matin, chez moi tout fonctionne à  merveille.
  • ClicCoolClicCool Membre
    11:57 modifié #7
    Mieux vaut ne pas compter sur un commitEditing arrivant à  point nommé, l'expérience montre que si on ne prète pas assez attention au réglages du binding, c'est parfois (souvent) un discardEditing qui est exécuté :(
  • TiffTiff Membre
    11:57 modifié #8
    Bien chef. Je suis allé cocher les bonnes cases.
    Comment fait-on un undo-redo ?
    Performing undo and redo is usually as simple as sending undo and redo messages to the NSUndoManager.

    J'étudie la doc, avant de créer un nouveau sujet.
  • muqaddarmuqaddar Administrateur
    11:57 modifié #9
    Encore un sujet qui va m'intéresser ;-)
    C'est marrant nos sujets se "croisent" Tiff !
  • TiffTiff Membre
    11:57 modifié #10
    Et je crois que vais aller voir ce que tu as fait sur les barres d'outils  ;)
Connectez-vous ou Inscrivez-vous pour répondre.