Affichage du mot "bits" dans une GUI

FreggFregg Membre
18:47 modifié dans API AppKit #1
Salut à  tous,

je suis débutant en Cocoa et jusque la tout allais bien. J'ai fait un application qui permet d'ouvrir un fichier et d'avoir sa taille et son emplacement. Une fois ces deux valeur obtenue je les affiche dans ma GUI. Pour la taille, j'affiche la taille (normale, en MB) et la taille sur le disque (en bits).
Voici ma méthode :
<br />-(NSString*) getFileSizeString<br />{<br />	int sizeOfFile = [self getFileSize];<br />	int giga=0;<br />	int mega=0;<br />	int kilo;<br />	int bits;<br />	bits = sizeOfFile % 1000;<br />	kilo = (sizeOfFile / 1000) % 1000;<br />	mega = (sizeOfFile / 1000000) % 1000;<br />	giga = sizeOfFile / 1000000000;<br />	<br />	if(giga!=0) {<br />		return [NSString stringWithFormat:@&quot;%1.2f MB (%i.%i.%i.%i bits)&quot;, (float) sizeOfFile/(1024*1024), giga, mega, kilo, bits];<br />	} else { // rajouter le mot &quot;bits&quot;<br />		return [NSString stringWithFormat:@&quot;%1.2f MB (%i.%i.%i bits)&quot;, (float) sizeOfFile/(1024*1024), mega, kilo, bits];<br />	}<br />}<br />

mon problème est le suivant : l'application refuse d'afficher le mot "bit(s)" (qu'il soit au singulier ou au pluriel), c-à -d qu'au lieu de m'afficher, par ex :" 5.44Mo (5.671.543 bits) "
il m'écrit :" 5.44Mo (5.671.543 " (il ne ferme même pas la parenthèse)

Ca fait plusieurs heures que je cherche mais je trouve pas pourquoi cela ne fonctionne pas. J'ai chercher sur google, mais rien trouver de concrèt.

Quelqu'un sait-il pourquoi cela se produit et comment réussir a afficher le mot "bits" ??

Merci !

Réponses

  • AliGatorAliGator Membre, Modérateur
    18:47 modifié #2
    Bienvenue sur OC !  :o

    Ne serait-ce pas ta TextView que tu as mise dans ta GUI qui n'est tout simplement pas assez large ?
    Je sais que c'est tout bête, mais qd on a la tête dans le guidon parfois...

    NB, pour ce genre de code à  débuguer, en plus d'afficher ta chaà®ne dans ta GUI, tu peux utiliser la fonction [tt]NSLog(@filesize = %@" , maStringAAfficherDansLaGUI)[/tt] (le 2e paramètre étant sensé être ta NSString retournée par la methode getFileSizeString) pour qu'il t'affiche la NSString dans la console de XCode et que tu puisses valider si ça donne ce qui est attendu ou pas.

  • 18:47 modifié #3
    je rajoute par ailleurs que tu devrais utiliser 1024 et non pas 1000

  • Philippe49Philippe49 Membre
    18:47 modifié #4
    Et que INT_MAX c'est à  peu près 2 milliards. Si les fichiers traités dépassent deux 2 Go, cela va poser problème.

  • AntilogAntilog Membre
    janvier 2008 modifié #5
    dans 1200779841:

    je rajoute par ailleurs que tu devrais utiliser 1024 et non pas 1000




    Pas vraiment, les divisions par 1000 sont faites pour séparer les chiffres par groupes de 3 (bon, les noms portent un peu à  confusion quand on parle de bits)...

    Pour le problème en lui-même, je ne vois que la rien, la réponse d'Ali est peut-être la bonne: taille de la vue (je n'y aurais pas pensé: peut-être du vécu?)
  • Philippe49Philippe49 Membre
    18:47 modifié #6
    A part un truc comme ça
    NSLog(@Bonjou\0r);    ==>   Bonjou
    je ne vois pas trop ce qui pourrait se passer, à  part ce que dit Aligator
  • FreggFregg Membre
    18:47 modifié #7
    dans 1200775477:

    Bienvenue sur OC !  :o

    Ne serait-ce pas ta TextView que tu as mise dans ta GUI qui n'est tout simplement pas assez large ?
    Je sais que c'est tout bête, mais qd on a la tête dans le guidon parfois...


    C'était exactement cela !!! J'ai perdu plusieurs heures uniquement pour ca, ca fait mal...
    Super merci ! C'était une "bête" erreur, mais elle aurait pu encore durée des heures.. J'était déjaà  parti dans des considération de Token ou de KeyWord et que c'était pour ça qu'il voulais pas me l'afficher ou quoi...
    Mille merci !!

    dans 1200785773:

    dans 1200779841:

    je rajoute par ailleurs que tu devrais utiliser 1024 et non pas 1000

    Pas vraiment, les divisions par 1000 sont faites pour séparer les chiffres par groupes de 3 (bon, les noms portent un peu à  confusion quand on parle de bits)...


    C'est exactement ca ! C'est uniquement pour séparer les chiffre en groupe de 3 afin de rendre la taille plus lisible...

    Merci pour l'info sur INT_MAX. Pour le moment je ne devrais pas avoir a faire avec des fichier de plus de 2Go (pour le moment)... Si un jour cela change, je viendrai vous poser une question sans doute...  ::)
  • psychoh13psychoh13 Mothership Developer Membre
    18:47 modifié #8
    Je pense que pour afficher ton nombre de façon "lisible" tu peux aussi directement utiliser des NSFormatter ou alors carrément les localisations de l'ordinateur pour afficher le nombre différemment selon le pays.
  • FreggFregg Membre
    18:47 modifié #9
    Je connais pas le NSFormatter, je me renseignerai donc...

    Dans un premier temps, comme j'ai pas spécialement l'intention de distribuer le programme partout a travers le monde, je vais pas faire directement selon le pays... J'vais y aller petit à  petit...  :o
  • AliGatorAliGator Membre, Modérateur
    18:47 modifié #10
    Certes, mais c'est vrai que c'est pas bête ce que dit psychoh13 : les NSFormatters sont fait pour ça, afficher à  l'écran des nombres juste comme tu veux. Et c'est une fonctionnalité directement accessible depuis Interface Builder (IB).

    Conclusion : tu crées un NSTextField dans ta GUI (ça c'est déjà  fait à  priori donc) et tu lui associes un NSFormatter depuis IB (par simple glisser-déposer du NSFormatter sur ton textField) pour qu'il formattes directement avec "." comme séparateur de milliers et en rajoutant " bits" derrière le nombre.
    Et du côté du code tu n'auras plus rien à  faire, juste envoyer la valeur numérique : même plus besoin de passer par une NSString, tu envoies [tt][monTextField setIntValue: tailleDuFichierEnBits][/tt] directement et basta, le NSFormatter rajouté via IB se chargera de la mise en forme. Magique ;)
  • schlumschlum Membre
    18:47 modifié #11
    À noter que s'il n'y a pas de NSFormatter qui fait ce qu'on veut, on peut en coder un assez facilement  ;)
    On peut même gérer les unités comme ça...
  • FreggFregg Membre
    18:47 modifié #12
    Merci beaucoup pour vos conseils plus que pointu ! Ca m'aide vraiment...

    Pour le moment, j'ai non seulement codé la méthodes que je voulais mais en plus j'ai trouver d'où venait ce (faux) bug. Je vais donc en rester la...

    Mais lors d'une refactorisation, promis, je passe aux NSFormatter...

    Encore mille merci pour votre aide...
Connectez-vous ou Inscrivez-vous pour répondre.