UndoManager

RadadaRadada Membre
01:13 modifié dans API AppKit #1
Salut à  tous,

développeur C++ depuis de nombreuses années, j'ai décidé de franchir le pas et de commencer la programmation en Objective C (de la balle entre parenthèse :p)

J'ai donc acheté le bouquin de Aaron Hilleglass "Programmation Cocoa sous MacOSX" 3ème édition. J'ai déjà  contacté l'auteur pour ce pb, mais il n'a pas répondu...

Je suis en train de voir le chapitre consacré au NSUndoManager. D'après ce qu'il est écrit, il faut utiliser le codage KVO/KVC avec 2 ou 3 petites méthodes de NSUndoManager pour implémenter une gestion des "undo" rudimentaires. Notamment, le nomage des méthodes est très important dans le codage KVC/KVO puisque le système va chercher des méthodes avec des noms normés.

Donc, lorsque je fais ce qu'il est indiqué dans le bouquin, l'undo ne marche pas un brin (alors que dans le fichier d'exemple si :D).
Je poste donc le petit (tout petit) bout de code. Si vous poivez jeter un oeil et voir ce qui pourrait merder, ce serait super sympa : ) --> http://www.2shared.com/file/5772724/4ce884bd/RaiseMan.html

Pour info, je suis sous 10.5.7 et XCode 3.1.2

Merci.

Radada

Réponses

  • CéroceCéroce Membre, Modérateur
    01:13 modifié #2
    Si tu avais lancé ton débogueur, tu te serais vide rendu compte que les méthodes -[MyDocument insertObject: inEmployeesAtIndex:] et -[MyDocument  removeObjectFromEmployeesAtIndex:] ne sont appelées.

    Les actions des boutons ne doivent plus être reliées aux méthodes -add: et remove: du NSArrayController.


    P.S.: Retire le dossier Build quand tu nous files un projet, ça rend le fichier à  télécharger très gros pour rien.
  • RadadaRadada Membre
    01:13 modifié #3
    Salut et merci pour la réponse.

    J'avais effectivement bien vu que les méthodes nétaient pas appelées, mais je ne comprends pas pkoi puisque les boutons sont bien reliés au méthode add et remove du NSArrayController. D'ailleurs, l'ajout et la suppression marchent.
    A moins qu'il n'y ait une autre connection à  réaliser ou nu paramétrage du NSArrayController?
    P.S. : je dis ça de mémoire, je n'ai pas XCode sous la main puisque je suis au taf sous M$hit

    Dsl pour le dossier build, j'ai fait ça en vitesse : ( J'y penserais la prochaine fois...
  • CéroceCéroce Membre, Modérateur
    mai 2009 modifié #4
    Grâce à  toi, je viens de découvrir certaines choses que je connaissais pas sur le KVC. Bon déjà , oublie ce que je t'ai écrit, laisse les actions add: et remove: sur les boutons.

    Le problème: tu n'as pas précisé quel était le contenu observé (géré) par le NSArrayController. Jusqu'à  maintenant, comme il n'avait pas de contenu, il créait son propre NSMutableArray et ajoutait des instances de Person dedans. Tu ne te rendais compte de rien, mais le NSMutableArrayController employees de MyDocument restait inchangé.

    La solution: lui dire que tu veux utiliser le NSMutableArray qui appartient au document. Pour cela, binde Content Array du NSArrayController sur [File's owner], avec le key path employees.

    La technique utilisée par Hillegass est intéressante, mais c'est vrai que ça fait beaucoup à  la fois, d'autant plus que la présentation du KVC est succincte dans le livre.
  • RadadaRadada Membre
    01:13 modifié #5
    dans 1242310395:

    Grâce à  toi, je viens de découvrir certaines choses que je connaissais pas sur le KVC. Bon déjà , oublie ce que je t'ai écrit, laisse les actions add: et remove: sur les boutons.

    Le problème: tu n'as pas précisé quel était le contenu observé (géré) par le NSArrayController. Jusqu'à  maintenant, comme il n'avait pas de contenu, il créait son propre NSMutableArray et ajoutait des instances de Person dedans. Tu ne te rendais compte de rien, mais le NSMutableArrayController employees de MyDocument restait inchangé.

    La solution: lui dire que tu veux utiliser le NSMutableArray qui appartient au document. Pour cela, binde Content Array du NSArrayController sur [File's owner], avec le key path employees.

    La technique utilisée par Hillegass est intéressante, mais c'est vrai que ça fait beaucoup à  la fois, d'autant plus que la présentation du KVC est succincte dans le livre.


    Oki doki, merci bcp Céroce. Je regardes ce WE car je ne pourrais pas tester avant : )
    Je reposte pour te dire si c'est OK, mais il n'y a pas de raisons : )
  • RadadaRadada Membre
    01:13 modifié #6
    Yep yep yep, ça marche.
    Merci beaucoup mec :)

    dans 1242320480:

    dans 1242310395:

    Grâce à  toi, je viens de découvrir certaines choses que je connaissais pas sur le KVC. Bon déjà , oublie ce que je t'ai écrit, laisse les actions add: et remove: sur les boutons.

    Le problème: tu n'as pas précisé quel était le contenu observé (géré) par le NSArrayController. Jusqu'à  maintenant, comme il n'avait pas de contenu, il créait son propre NSMutableArray et ajoutait des instances de Person dedans. Tu ne te rendais compte de rien, mais le NSMutableArrayController employees de MyDocument restait inchangé.

    La solution: lui dire que tu veux utiliser le NSMutableArray qui appartient au document. Pour cela, binde Content Array du NSArrayController sur [File's owner], avec le key path employees.

    La technique utilisée par Hillegass est intéressante, mais c'est vrai que ça fait beaucoup à  la fois, d'autant plus que la présentation du KVC est succincte dans le livre.


    Oki doki, merci bcp Céroce. Je regardes ce WE car je ne pourrais pas tester avant : )
    Je reposte pour te dire si c'est OK, mais il n'y a pas de raisons : )
Connectez-vous ou Inscrivez-vous pour répondre.