Questions à  propos du tuto Cacao

CrazyJoCrazyJo Membre
14:47 modifié dans API AppKit #1
Bonjour à  tous,

Premièrement merci pour le tutoriel Cacao. J'en suis à  l'étape où il faut coder un panel pour pouvoir récupérer une application. J'ai deux , trois problèmes de compréhension dans le code.

Dans la portion de code suivante :
<br />if (leChemin) {			// Premier passage<br />		result = [oPanel runModalForDirectory:NSHomeDirectory() file:nil types:fileTypes];<br />		NSLog(@&quot;1&quot;);<br />	} else {<br />		result = [oPanel runModalForTypes:fileTypes];	// les fois suivantes<br />			NSLog(@&quot;2&quot;);<br />	}<br />


Que fait concrètement la méthode runModalForDirectory: et runModalForTypes: ? Et qu'est que fait la classe NSHomeDirectory ?

Ensuite je me demandais ceci : Mais que fait cette condition ? Pourquoi je ne vois jamais le 1 dans ma console  (même lorsque c'est la 1ère ouverture de l'app) ?

Plus bas dans ce code il y a :
<br />	filesToOpen = [oPanel filenames] ;	// Prise du (des) nom(s)<br />		if ([filesToOpen count] == 1) {		// Nombre de nom = 1 ?<br />


Pourquoi vérifier si filesToOpen vaut bien 1 puisque plus haut on a ceci : [oPanel setAllowsMultipleSelection:NO]; qui empêche l'user de sélectionner plus d'un fichier...

Voilà  , merci et vive OC  :p

Réponses

  • schlumschlum Membre
    14:47 modifié #2
    "runModalForDirectory:" et "runModalForTypes:" sont deux méthodes qui ouvrent le panneau standard de sélection de fichiers

    NSHomeDirectory n'est pas une classe mais une fonction qui renvoie le chemin du home ("~")
  • AliGatorAliGator Membre, Modérateur
    septembre 2008 modifié #3
    Salut,

    Alors je n'ai pas lu le tuto en question donc je vais juste te réponse sur le code que tu cites :
    • [tt]runModalForDirectory:file:types[/tt] affiche ton NSOpenPanel oPanel, sous forme modale (c'est à  dire que ça bloque le reste de l'appli, tu ne peux pas interagir avec les autres fenêtres tant que tu n'as pas fermé ce OpenPanel par un "Ouvrir" ou un "Annuler"), en se positionnant par défaut dans le répertoire (directory) indiqué en premier paramètre.
    • Il se trouve que le premier paramètre passé dans le premier cas est [tt]NSHomeDirectory()[/tt] qui n'est pas une classe mais une fonction C (tu peux le voir du fait de la présence des parenthèses derrière le nom). Cette fonction retourne une NSString contenant le chemin d'accès vers le home directory (la petite maison) de l'utilisateur courant.
    • Pour la vérification de [tt]([filesToOpen count] == 1)[/tt] je pense que ce n'est en effet pas justifié si le setAllowsMultipleSelection est mis à  NO plus tôt, c'est sans doute juste une "sécurité" (d'autant que même si allowsMultipleSelection était à  YES c'est bête de ne pas faire du tout le code dans ce cas, au lieu par exemple de soit boucler sur tous les éléments (même s'il n'y en a qu'un, le but étant de faire un bloc de code générique qu'on sache retaper sans réfléchir) soit ne traiter que le premier élément... enfin bref bizarre)... à  moins que ce ne soit pour traà®ter le cas où l'utilisateur a cliqué sur le bouton "Annuler" (dans ce cas le count vaudrait zéro), mais en général ce cas là  est traà®té avant directement par le resultat retourné par [tt]runModal...[/tt]
  • CrazyJoCrazyJo Membre
    14:47 modifié #4
    Merci à  vous deux et spécialement à  AliGator pour ta réponse très complète 

    Effectivement je me suis trompé sur le cas de NSHomeDirectory... j'avais vu que NS et pas les () à  la fin...

    Bon donc voilà  qui m'avance déjà  beaucoup. Il ne reste donc plus qu'à  élucider la partie avec le if(leChemin).
  • schlumschlum Membre
    14:47 modifié #5
    À mon avis il est mal fichu le if(chemin)
    ça devait être pour envoyer sur NSHomeDirectory() tant qu'on a pas de chemin défini et sur chemin dans le cas contraire...
    Là  le test est incohérent.
Connectez-vous ou Inscrivez-vous pour répondre.