IB: fenêtre "NSNumberFormatter Info"

Old SaltOld Salt Membre
19:17 modifié dans Xcode et Developer Tools #1
Bonjour,
Quelqu'un sait-il à  quoi sert la case à  cocher " ,<-->." qui est en bas à  droite de la fenêtre "NSNumberFormatter Info" (laquelle apparaà®t quand on glisse un NSNumberFormatter dans un NSTextField) ?
Pour ma part, je n'arrive même pas à  la cocher.
Merci...

Réponses

  • fouffouf Membre
    19:17 modifié #2
    Salut Old Salt, bienvenue sur Objective-Cocoa  <3 <br />
    dans 1109862710:

    Pour ma part, je n'arrive même pas à  la cocher.

    Ouais c'est bizarre, en voulant essayer ce truc, j'ai eu le même pb. Comment ca ce fait ?  ???
  • amnesicamnesic Membre
    mars 2005 modifié #3
    dans 1109862710:

    Bonjour,
    Quelqu'un sait-il à  quoi sert la case à  cocher " ,<-->." qui est en bas à  droite de la fenêtre "NSNumberFormatter Info" (laquelle apparaà®t quand on glisse un NSNumberFormatter dans un NSTextField) ?

    Je crois que c'est pour permettre de définir le type séparateur de décimal pour le formatage . Entre le point (valeur par défaut ) et la virgule.


    Pour ma part, je n'arrive même pas à  la cocher.

    Si tu as la case à  cocher "Localize" activé cela devient grisé car inutile. En effet il va prendre les préférences Internationales que tu as définis.

    [Edit]
    Effectivement il y a un petit bug dans IB (2.4.2), si on le malheur de d'avoir cliqué sur la case "Localize" avant ",<-->." et bien cela ne marche plus et oblige à  détacher et remettre le NSNumberFormatter.. (bon et bien on va remplir un petit bug report bugreport.apple.com :( )
  • VeillardVeillard Membre
    19:17 modifié #4
    Le mieux, est de cocher la case "Localize" plutôt que de choisir son séparateur décimal via ",<-->.", c'est un choix perso si bien sûr on a localisé son appli :P
  • Old SaltOld Salt Membre
    19:17 modifié #5
    Merci pour vos réponses.
    J'ai un autre problème, toujours avec NSNumberFormatter; je précise d'abord que je débute dans le monde du Cocoa (bien qu'étant grand consommateur de chocolat, depuis longtemps):
    J'ai plusieurs "NSTextField" dans ma fenêtre, je saisis un nombre dans l'un deux et j'ai un bouton "OK" qui appelle ma méthode avec laquelle je multiplie ce nombre par des coefficients puis j'affiche les résultats dans les autres NSTextField.
    Tout cela fonctionne bien en l'état, mais si je glisse un NSNumberFormatter sur chaque NSTextField, ça se gâte:
    - si j'appuie sur "return" (équivalent clavier du bouton "OK"), tout va bien, le formatage s'effectue correctement dans tous les NSTextField
    - si je clique sur "OK" sans avoir validé l'entrée par un "tab" ou un clic dans un autre NSTextField, le nombre saisi est mal pris en compte, seulement les milliers le sont (si je saisis 2000, le calcul s'effectue sur 2 et pas sur 2000; si je saisis moins de 1000, ça marche)

    J'ai réalisé l'exemple Currency Converter d'Apple, il fonctionne, mais si je glisse un NSNumberFormatter dans le champs "dollarField", j'obtiens le même problème qu'avec mon application.
    Je ne m'en sors pas, pourriez-vous m'aider ? :(
  • VeillardVeillard Membre
    19:17 modifié #6
    Apparemment, tu as un problème de séparateur décimal. Décoche "Add 1000 separators" dans ton formatter et essaie voir...
  • Old SaltOld Salt Membre
    mars 2005 modifié #7
    J'y avais pensé, mais ça ne change rien  ???
    Par ailleurs, je constate une bizarrerie (?); si je coche Localize et Add 1000 separator, les formats apparaissent comme ci-dessous:
    Positive   #,##0.00
    Zero        0,00 (avec une virgule, pas un point)
    Negative  -#,##0.00

    J'ai essayé de remplacer la virgule par un point (dans le format du Zero), ça ne change rien au fonctionnement de mon application.
    Avez-vous aussi cette virgule (alors que l'on pourrait s'attendre à  un point, comme dans Positive et Negative) ?
  • ClicCoolClicCool Membre
    19:17 modifié #8
    dans 1109929492:

    - si j'appuie sur "return" (équivalent clavier du bouton "OK"), tout va bien, le formatage s'effectue correctement dans tous les NSTextField
    - si je clique sur "OK" sans avoir validé l'entrée par un "tab" ou un clic dans un autre NSTextField, le nombre saisi est mal pris en compte, seulement les milliers le sont (si je saisis 2000, le calcul s'effectue sur 2 et pas sur 2000; si je saisis moins de 1000, ça marche)


    Il semble que ton textField attende de perdre le focus (avec tab ou enter) pour mettre à  jour proprement son contenu.

    S'il est bindé, il doit suffire d'utiliser les options "continuously set value" et "validate immediatly"

    Sinon je ne sais plus trop si les régalges actions (Send Action On: Enter Only ou End Editing ) ont également une incidence sur la validation du contenu ...? Essaies toujours...

    Tu peux également ajouter une ligne au début de ton "Action OK" avec [maTextField validateEditing]; ?
  • VeillardVeillard Membre
    19:17 modifié #9
    Par ailleurs, je constate une bizarrerie (?); si je coche Localize et Add 1000 separator, les formats apparaissent comme ci-dessous:
    Positive  #,##0.00
    Zero        0,00 (avec une virgule, pas un point)
    Negative  -#,##0.00


    C'est normal, c'est une fois compilé que l'appli prend en compte le point ou la virgule.

    Essaie de faire ceci :
    - tape ta valeur dans ton TextField sous la forme 2.500 et 2,500 pour voir le résultat. Ce permettra de voir où se trouve le problème.
  • Old SaltOld Salt Membre
    19:17 modifié #10
    dans 1109933388:
    Il semble que ton textField attende de perdre le focus (avec tab ou enter) pour mettre à  jour proprement son contenu.
    Oui, mais il me semble que ce soit un comportement normal, non ?


    S'il est bindé, il doit suffire d'utiliser les options "continuously set value" et "validate immediatly"
    Je débute, je n'ai aucune idée sur la question de savoir s'il est bindé ou pas, ni sur la façon dont on le vérifie...


    Sinon je ne sais plus trop si les régalges actions (Send Action On: Enter Only ou End Editing ) ont également une incidence sur la validation du contenu ...? Essaies toujours...
    Il me semble logique de sélectionner "end editing", mais de toute façon c'est pareil avec "enter only".


    Tu peux également ajouter une ligne au début de ton "Action OK" avec [maTextField validateEditing]; ?
    Sans effet   :(
  • Old SaltOld Salt Membre
    19:17 modifié #11
    dans 1109933990:

    Par ailleurs, je constate une bizarrerie (?); si je coche Localize et Add 1000 separator, les formats apparaissent comme ci-dessous:
    Positive   #,##0.00
    Zero        0,00 (avec une virgule, pas un point)
    Negative  -#,##0.00


    C'est normal, c'est une fois compilé que l'appli prend en compte le point ou la virgule.
    Ah ? Merci du tuyau, je n'y avais pas songé.


    Essaie de faire ceci :
    - tape ta valeur dans ton TextField sous la forme 2.500 et 2,500 pour voir le résultat. Ce permettra de voir où se trouve le problème.
    Non, car je saisis mon nombre sous la forme 2500 (c'est le "formatter" qui le transforme en "2 500" ou "2,500" ou "2.500"), non ?
  • VeillardVeillard Membre
    19:17 modifié #12
    Non, car je saisis mon nombre sous la forme 2500 (c'est le "formatter" qui le transforme en "2 500" ou "2,500" ou "2.500"), non ?


    Pas exactement, ça dépend des cas. Il faut entrer la valeur dans le bon format et celle qui sort, c'est le formatter qui s'en charge. Si la valeur n'est pas au bon format, quand tu fais TAB, tu ne peux pas passer au champ suivant.
  • Old SaltOld Salt Membre
    19:17 modifié #13
    Dans mon cas, je saisis 2500 et je peux changer de champs sans problème, le formatter transforme bien en 2 500,00 comme je le souhaite.
    Par contre si je clique sur "OK" avant de changer de champs, j'obtiens n'importe quoi, ou rien, ou 2 ???
  • VeillardVeillard Membre
    19:17 modifié #14
    Par contre si je clique sur "OK" avant de changer de champs, j'obtiens n'importe quoi, ou rien, ou 2


    Avec 2500 ? Et en cliquant sur OK après avoir changé de champ ?
  • mpergandmpergand Membre
    19:17 modifié #15
    Salut old salt  ;)

    Comme je te l'avais promis, ça réagit fort  ::)


    Citation de: ClicCool
    S'il est bindé, il doit suffire d'utiliser les options "continuously set value" et "validate immediatly"
    Je débute, je n'ai aucune idée sur la question de savoir s'il est bindé ou pas, ni sur la façon dont on le vérifie...

    ClicCool, c'est notre gourou des bindings (sorte de programmation pas liaisons), mais c'est peut-être pas nécessaire que tu t'y mettes tout de suite  ;)

    Comme je te l'ai dit sur macBidouille, je ne suis pas arrivé à  reproduire ton problème, le plus simple serait que tu mettes ton projet sur le forum, pour cela tu fais:
    1) tu jettes tout le dossier build de ton projet à  la poubelle (pour en réduire la taille au minimum)
    2) tu fais un clic-droit sur le dossier de ton projet et tu choisis Créer une archive de ...., tu obtiens un fichier .zip ( il ne devrait faire que quelques dizaines de Ko maxi)
    3) tu postes un nouveau message sur le forum et dans Options supplémentaires (en dessous de la zone Message) tu cliques sur Attacher - choisir le fichier  et dans le panneau qui apparaà®t tu choisis le fichier zipper de ton projet.

    A plus :-*
  • ClicCoolClicCool Membre
    19:17 modifié #16
    dans 1109935639:

    Par contre si je clique sur "OK" avant de changer de champs, j'obtiens n'importe quoi, ou rien, ou 2 ???


    C'est ça qui m'intrigue.
    Si ça venait d'un réglage du formatter y'a pas de raison que le résultats ne soit pas identique selon qu'on clique sur OK ou tape "enter" .
    Ce qui change me semble être la séquence perte-Focus / Fin d'édition qui s'exécute quand tu tappes "Enter" et pas quand tu cliques sur "OK"

    dans 1109934621:


    Tu peux également ajouter une ligne au début de ton "Action OK" avec [maTextField validateEditing]; ?
    Sans effet  :(

    Et d'un autre coté un validateEditing n'y change rien non plus ! ???

    Essaies voir avec:
    [maTextField resignFirstResponder]; au débute de ton "action OK"
  • Old SaltOld Salt Membre
    19:17 modifié #17
    dans 1109937054:

    Par contre si je clique sur "OK" avant de changer de champs, j'obtiens n'importe quoi, ou rien, ou 2


    Avec 2500 ? Et en cliquant sur OK après avoir changé de champ ?
    Dans ce cas-là , ça marche. C'est uniquement lorsque je clique sur "OK" avant de changer de champs que ça coince.
  • Old SaltOld Salt Membre
    19:17 modifié #18
    dans 1109937483:
    Essaies voir avec:
    [maTextField resignFirstResponder]; au débute de ton "action OK"
    Marche pas non plus !

    Par contre, je progresse légèrement, en tripotant les formats d'un NSNumberFormatter, je viens de réussir à  faire fonctionner le NSTextField associé. Hélas, sans pouvoir reproduire le même tripotage dans les autres NSNumberFormatter.
  • Old SaltOld Salt Membre
    19:17 modifié #19
    Enfin, je viens d'y parvenir (cela fait tout de même 11 jours que je cale dessus).
    Il semble que ce soit le format du Zero qui mettait la pagaille, mais je ne comprend pas pourquoi.
    J'arrive donc à  un résultat correct et reproductible en mettant les formats comme ci-dessous:

    Positive   #,##0.00
    Zero        0 00 (avec un espace, pas un point ni une virgule)
    Negative  -#,##0.00
    (et en cochant Localize et Add 1000 separator)

    Je l'ai également testé avec succès dans le Currency Converter.
    Pourquoi faut-il donc cet espace dans le format du Zero ?   ???

    Merci pour vos messages, qui m'ont incité à  poursuivre du côté des formats et pas vers mon code.


    dans 1109937122:
    Citation de: ClicCool
    S'il est bindé, il doit suffire d'utiliser les options "continuously set value" et "validate immediatly"
    Je débute, je n'ai aucune idée sur la question de savoir s'il est bindé ou pas, ni sur la façon dont on le vérifie...

    ClicCool, c'est notre gourou des bindings (sorte de programmation pas liaisons), mais c'est peut-être pas nécessaire que tu t'y mettes tout de suite  ;)
    Oui, c'est ce que son statut de "bindingologue" m'avait laissé entrevoir.  :P
  • VeillardVeillard Membre
    19:17 modifié #20
    Bravo, j'avais pas vu la subtilité  ???
Connectez-vous ou Inscrivez-vous pour répondre.