NSFont name & size

18:01 modifié dans API AppKit #1
Bonjour,

Grâce à  la méthode - (void)changeFont:(id)sender de NSFontManager je sais quand l'on change de font depuis un fontPanel
J'ai dc fait :
- (void)changeFont:(id)sender<br />{<br /> NSFont *newFont = [sender selectedFont];<br />[standardFontField setStringValue:[NSString stringWithFormat:@&quot;%@ %0.1f pt&quot;, [newFont fontName], [newFont pointSize]]];<br />}<br />


manque de pot j'ai tout un tas de truc imcompréhensible ds le textfield

Réponses

  • ChachaChacha Membre
    18:01 modifié #2
    dans 1124390754:

    manque de pot j'ai tout un tas de truc imcompréhensible ds le textfield

    Quel genre ?
    Au passage, je pense que %.1f conviendra mieux que %0.1f

    Chacha
  • 18:01 modifié #3
    Bon en fait voilà  c'est ds les prefs
    Donc j'ai fais un -(void)windowDidLoad pour charger les checkbox, popup etc.. etc..
    Donc quand je charge le textField : standardFontField avec le NSFont archivé en NSData :
    <br />[standardFontField setStringValue:[NSString stringWithFormat:@&quot;%@ %.1f pt&quot;, [[NSUnarchiver unarchiveObjectWithData:[prefs objectForKey:PREF_STANDARDFONT]] fontName], [[NSUnarchiver unarchiveObjectWithData:[prefs objectForKey:PREF_STANDARDFONT]] pointSize]]];<br />
    

    Aucun pb d'affichage ds la view

    J'ai donc une méthode - (void)changeFont:(id)sender envoyé à  chaque fois qu'on change de font ds un NSFontPanel et lorsque je rempli mon standardTextField avec ça :
    <br />- (void)changeFont:(id)sender<br />{<br />NSFont *newFont = [sender selectedFont];<br />[standardFontField setStringValue:[NSString stringWithFormat:@&quot;%@ %.1f pt&quot;, [newFont fontName], [newFont pointSize]]];<br />}<br />
    

    Le textField m'indique (ça a changé maintenant.. bizarre)... ben en fait maintenant il change plus du tout il reste sur la police que j'ai fixé au départ c'est à  dire "Helvetica 12.0 pt"
  • ChachaChacha Membre
    18:01 modifié #4
    Bon, dans un premier temps, je te fâche un peu, petit polisson.

    Lisons la doc de changeFont:

    informs responders of a font change. Generally this change is because the user changed the font either in the selection of a rich text field or in a whole plain text field. Any object that contains a font the user can change must respond to the changeFont: message by sending a convertFont: message back to sender (an NSFontManager object) for each font in the selection. For more information, see ?Responding to Font Changes?.
    Be aware that selectedFont at this point may return unpredictable results. The font returned from this method may not be the last font selected, or there may be multiple fonts selected at the time changeFont: is called. The use of selectedFont from within changeFont: is strongly discouraged.

    Il y a donc au moins deux problèmes dans ton code:
    -tu n'appelles pas convertFont:
    -tu utilises selectedFont:


    Maismaismaisalors comment faire ?
    Je te propose cela, qui si je ne me trompe pas doit être la bonne façon de faire
    <br />- (void)changeFont:(id)sender<br />{<br />  NSFont* oldFont = [NSFont fontWithName:[self stringValue]];//un truc du genre<br />  NSFont *newFont = [sender convertFont:oldFont];<br />  [standardFontField setStringValue:[NSString stringWithFormat:@&quot;%@ %.1f pt&quot;, [newFont fontName], [newFont pointSize]]];<br />}<br />
    


    Voili voilà 
    Tiens-moi au courant

    +
    Chacha
  • 18:01 modifié #5
    dsl Chacha c'est reparti de plus belle !!! J'ai re les incompréhension :
    ds le textField :
    (null) 407964074332139649669770709261903307980522095151130735552843064889721043889909749080781998088161116945421463573801199434141486796920665995074148956961802366164353495740073105255672552963223337871836837889977600220486355502448483762176.0 pt
    
  • ChachaChacha Membre
    18:01 modifié #6
    dans 1124394605:

    dsl Chacha c'est reparti de plus belle !!! J'ai re les incompréhension :
    ds le textField :

    Ah ouais quand même !
    Mais tout s'explique :
    le "null" indique que ton objet [newFont newName] est null. Donc a priori, newFont est null.
    En effet, en Objective-C, c'est pas très grave de travailler avec des pointeurs à  nil. Si tu envoies à  nil une méthode censée renvoyer un objet, tu récupère nil, c'est assez pratique pour ne pas alourdir la gestion d'erreurs.
    Par contre, dès que ta méthode doit te renvoyer autre chose qu'un objet (genre un int, un float...) alors là  c'est la cata : tu ne récupères pas 0, tu récupères n'importe quoi : le code est complètement incorrect, et surtout tu provoques des fautes mémoire (bel exemple, ici).
    Donc dans ton cas, tout le problème vient du fait que newFont est nil. Maintenant, je ne sais pas pourquoi...
    Faut chercher.

    +
    Chacha
  • 18:01 modifié #7
    Hop là  chacha dsl autant pour moi tu m'a parlé de mémoire et comme j'ai eu le mm problème avant et que j'ai enregistrer ce newFont ds les NSUserDefaults, donc j'ai viré la pref : PREF_STANDARDFONT et relancé l'app
    Tout baigne donc :D
    (et oui le oldFont été archivé en nil, donc désarchivé en nil :D ducoup newFont le devient à  son tour ! merci le NSLog :p)
    Merci chacha !
Connectez-vous ou Inscrivez-vous pour répondre.