Update NSTextField <-> DataModel
lugdanum
Membre
Bonjour tout le monde
Désolé pour le titre, mais je ne savais pas trop quoi mettre
J'utilise un DataModel et un NSTextField, quand je tape au clavier directement dans ce NSTextField, le texte est bien sauvegardé, j'ai aussi un bouton qui permet de choisir un dossier de destination, le chemin s'affiche ensuite dans ce NSTextField, mais là par contre le texte n'est pas sauvegardé, comme si l'action n'était pas prise en compte.
Je pense que la personne ici à le même problème que moi, mais j'ai pas compris non plus la réponse : http://forums.macrumors.com/showthread.php?t=490625
Mon code pour récupérer le chemin :
Si quelqu'un peut m'éclairer, encore merci d'avance !
Désolé pour le titre, mais je ne savais pas trop quoi mettre
J'utilise un DataModel et un NSTextField, quand je tape au clavier directement dans ce NSTextField, le texte est bien sauvegardé, j'ai aussi un bouton qui permet de choisir un dossier de destination, le chemin s'affiche ensuite dans ce NSTextField, mais là par contre le texte n'est pas sauvegardé, comme si l'action n'était pas prise en compte.
Je pense que la personne ici à le même problème que moi, mais j'ai pas compris non plus la réponse : http://forums.macrumors.com/showthread.php?t=490625
Mon code pour récupérer le chemin :
<br />NSOpenPanel *openPanel = [NSOpenPanel openPanel];<br /> [openPanel setCanChooseDirectories:YES];<br /> <br /> if([openPanel runModal] == NSFileHandlingPanelOKButton){<br /> [AfficheChemin setStringValue:[[openPanel URL] path]];<br /> } <br />
Si quelqu'un peut m'éclairer, encore merci d'avance !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Donc pour sauvegarder le textfield, il faut forcer le endEditing avec:
[window makeFirstResponder:nil];
J'avais déjà essayé avec ça mais sans succès.
En fait c'est plus après la perte du focus je pense que la sauvegarde se fait.
Merci en tout cas.
1. [tt][AfficheChemin validateEditing];[/tt] après setStringValue:
2. Modifier directement le DataModel avec un setter, la vue devrait se mettre à jour toute seule, bindings / Core Data ?
3. Ou alors si ça ne marche toujours pas, peut être qu'il faut regarder du côté des notifications...
Avant tout merci pour ces solutions.
1. [AfficheChemin validateEditing]; après setStringValue:
--> Ne fonctionne pas non plus
3. Ou alors si ça ne marche toujours pas, peut être qu'il faut regarder du côté des notifications...
--> J'ai essayé avec :
Mais ça ne fonctionne pas non plus, avec "controlTextDidChange" non plus
2. Modifier directement le DataModel avec un setter, la vue devrait se mettre à jour toute seule, bindings / Core Data ?
-->Je ne sais pas encore faire cela, je vais me documenter et essayer.
Encore merci en tout cas !
Avec :
Et connecter le delegate.
Merci, merci, au moins j'ai mon NSLog qui s'affiche.
donc en faisant :
et
J'ai bien "Texte modifié:" et "Texte modifié dans le bon" qui apparaà®t dans ma console, par contre la sauvegarde ne se fait toujours pas, sniff.
Quand je colle du texte dedans, c'est la même chose, la sauvegarde n'a pas lieu, par contre dès que je tape du texte "manuellement" au clavier dedans, la sauvegarde à bien lieu.
En tout cas j'ai encore appris quelque chose ce soir grâce à toi.
Il doit me manquer pas grand chose j'imagine, mais il faut que je trouve quoi...
Merci.
Sinon, pour que ton controller reçoive les notifications, il suffit qu'il soit délégate du TextField:
[AfficheChemin setDelegate:leController];
En fait je me suis basé sur cet exercice : http://cocoadevcentral.com/articles/000085.php
Et par exemple pour le champ (dans leur exercice) "Title", j'ai juste rajouter ce fameux bouton qui permet de choisir un dossier.
VOilà , merci de prendre (ou perdre) du temps pour m'aider.
Essaye:
Sinon, fais une recherche sur ce forum, ce problème a déjà été évoqué.
J'avais bien essayé avec ce même code :
Ou CheminFichier est la clef, mais cela ne fonctionne pas non plus.
Enfin ça fonctionne qu'à moitié, si on tappe au clavier dans le champ c'est ok, mais les copier/coller ou le path du NSOpenPanel ne sont pas pris en compte.
Je vais continuer mes recherches.
Merci beaucoup !
<a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/Overview.html#//apple_ref/doc/uid/20001838-SW1">Documentation Key-Value Coding</a>
Dans ce cas, modifie la valeur de ton modèle directement pour voir si ça se répercute (architecture MVC).
Si tu es en enter only ça pourrait expliquer.
Et pourquoi ne pas utiliser ton "modèle" ?
Si tu as lié ton AfficheChemin à un path c'est que tu veux utiliser ce chemin je suppose et donc qu'il est un "membre" de ton objet ?
Dans ce cas plutôt que de chercher à valider depuis ton TextField (qui s'occupe surtout de ce que l'utilisateur entre au clavier) pourquoi ne pas lier la valeur de ton textField à cette variable (dans ton cas, si tu as suivi l'exemple donné en lien, de ta propriété CoreData) et quand tu récupères le chemin tu affectes ça à ta propriété et Cocoa mettra à jour ton champ texte.
[Edit: ce que te proposes chkdsks en fait]
Merci vraiment pour vos réponses.
Je pense que le problème vient de moi, je n'y arrive pas c'est tout.
A l'occasion si vous avez le temps, j'ai modifié un chouya l'exemple pour vous montrer, mais franchement ne perdez pas du temps la dessus car je vais abandonner je pense, j'ai encore pas mal de choses à étudier pour progresser ! Autant maintenant la programmation Iphone/Ipad me parle un peu mais OSX ....
Merci.
Et bien que dire à part ... Respect ! Expliqué comme cela, c'est tout de suite plus compréhensible !
Evidemment maintenant ça fonctionne.
Je vais me replonger dans la lecture, j'en ai bien besoin effectivement, et continuer les tutoriels ...
En tout cas encore un GRAND MERCI pour toutes ces explications !!
[tt]
Bind to: Posts
Controller Key: selection
Model Key Path: title
Value Transformer: NSIsNotNil
[/tt]
J'ai pris title parce qu'il est obligatoire.
Bonne journée
::)
Programmation Cocoa sous Mac OS X
De Aaron Hillegass, une bonne base à AppKit et ses rapports avec Foundation
Et Les design patterns de Cocoa
Ouvrage de Erik M. Buck et Donald A. Yacktman bien traduit aussi qui permet de mieux comprendre ce qu'il y a derrière les objets de Cocoa et comment ils s'articulent les uns les autres.
NB: les lliens sur Pearson car il n'y a pas qu'Amazon et en plus on peut acheter un pdf à peine moins cher que le livre papier mais qui a ses charmes aussi (en particulier pour la recherche et les images/schémas)
Je ne connaissais pas Pearson, c'est vrai que pour le coup je préfère en PDF aussi, je peux lire après même sur mon ipad et ça le fait moins au travail si je me fait attraper avec un livre à la mian, tandis que devant un écran (un alt+tab se fait vite sur Windows...)
Je pense que certaines personnes sur ce forum devraient se réunir pour nous concocter un livre car elles ont largement les compétences !
Pourquoi pas sous forme de PDF aussi, une partie de l'argent serait pour les auteurs et l'autre pourrait servir également pour investir dans le site ?
Merci encore pour tout !
Je me présente je m'appele dominique je suis nouveau sur le forum et j'ai un souci je ne trouve pas ou poster un sujet de discussion,
je suis désolé je me suis permis de poster ici car j'ai une seconde question concernant les NsTextField,
Je me sers depuis peu de xcode et interface builder et dans une doc sur un forum on me dit d'inserer un UILabel mais je
ne trouve à aucun endroit dans interface builder de uilabel je n'ai que des objets commencant par NS...
J'ai donc des NsTextField mais pas de UI quelquechode dans le module library
Si quelqu'un pouvait éclairer ma lanterne concernant mes deux questions
Merci par avance
Cordialement
Dominique
Pour poster dans le bon forum tu peux cliquer sur le lien "Communauté" en haut à gauche de chaque page qui te mène à la racine des groupes classés par thèmes. Si tu veux utiliser des UILabel(s) tu as les groupes Développement iOS SDK (iPhone/iPad). Je les fréquente peu mais le plus approprié est probablement Developer programs, déploiement, devices... .
Quelque soit le groupe où tu atterris après l'avoir choisi tu as toujours un bouton rouge Nouveau sujet (en fait en blanc sur fond rouge) au dessus de la barre noire entête de la liste des sujets. Y'a puka
Oups, j'allais oublier: n'hésite pas à te présenter dans le forum "Nouveaux membres" et d'offrir une tournée de Perrier Citron (ça n'est pas obligatoire, d'autres boissons sont aussi très appréciées, mais bon, tu auras été prévenu