2010-12-11 6 views
0

J'ai un bouton plus et moins sous une liste dans mon application de cacao. Appuyez sur le bouton plus pour ouvrir une boîte de dialogue de sélection de fichier, et en sélectionnant un fichier/dossier et en appuyant sur OK, vous ajouterez l'URL renvoyée par la boîte de dialogue de fichier à la liste. Cette méthode fonctionne bien, mais n'est pas très conviviale. Par exemple, si je choisis un dossier dans mon répertoire de base, j'obtiens une URL comme ceci: file://localhost/Users/tristan/fighterjets Au lieu de ces URL «moche», que je stocke dans un champ caché dans NSTableView, pourrais-je obtenir quelque chose de plus convivial, comme /Users/tristan/fighterjets?Cocoa friendly URLs

Ou, si possible, même quelque chose comme dans les préférences Time Machine où vous pouvez choisir quels fichiers à exclure - le chemin du fichier avec l'icône. Je suppose que cela nécessitera probablement une deuxième colonne avant le chemin et récupérera l'icône du système d'une manière ou d'une autre. J'adorerais le savoir aussi.

+0

Il est important de réaliser que ce que vous considérez comme plus convivial n'est pas une URL, mais un * chemin * qui est facilement obtenu avec '- [chemin NSURL]' –

Répondre

2

Vous ne devriez pas montrer le chemin du tout. Cela n'est pas considéré comme convivial ... Tout d'abord, en fonction de l'environnement linguistique de l'utilisateur dans les Préférences Système, le nom du fichier peut ne pas correspondre à ce qui est affiché dans le Finder. Par exemple, Terminal.app devient ル ー ミ ナ ル .app en japonais. Vous devriez toujours utiliser -[NSFileManager displayNameAtPath:].

Le tri des fichiers par nom de fichier doit être effectué à l'aide de -[NSString localizedStandardCompare:].

L'icône associée à un fichier peut être obtenue via -[NSWorkspace iconForFile:].

Si vous montrer le chemin vers un geek, ou dans une interface utilisateur geeky comme celle de la machine du temps afin que vous puissiez assumer l'utilisateur de savoir ce que ~/ moyens, utilisez

NSURL*fileURL= ... you get a file:// URL somehow ... 
NSString* path=[fileURL path]; // extract the file system path 
NSString* abbreviatedPath=[path stringByAbbreviatingWithTildeInPath]; // this converts /User/user to ~ 

pour plus, voir this reference.

En fait, Cocoa a un élément d'interface utilisateur pré-construit pour montrer le chemin appelé NSPathControl, qui ressemble à this. Donc, je vous recommande de l'utiliser.

+0

Le seul problème que j'ai quand j'ajoute une colonne devant le chemin avec l'icône est quand je sauvegarde la liste dans un fichier (ce qui est requis). Apparemment, vous ne pouvez pas écrire un NSImage dans un NSDictionary. Comment pourrais-je sauvegarder la liste, même avec cette image? –

+0

Je voudrais simplement enregistrer l'URL du fichier complet ou le chemin d'accès complet sans enregistrer l'image. L'image et la chaîne montrée peuvent être régénérées à chaque fois. Vous voyez, vous n'avez pas besoin de tout sauvegarder ... il vous suffit de sauvegarder les informations essentielles, nécessaires pour recréer des choses. – Yuji

+0

Je vais voir comment je peux mettre en œuvre cela. Lors du chargement du tableau à partir du plist, je pourrais créer un nouveau NSMutableArray et y ajouter les nouveaux objets NSMutableDictionary, en y recréant l'icône. Mais alors j'ai la question de savoir comment obtenir le NSMutableDictionary pour ne pas enregistrer la partie image du tableau ... cela me déroute. Peut-être que je peux comprendre après avoir pris une tasse de café et quelques biscuits = P EDIT: Je l'ai fait fonctionner, merci beaucoup pour votre solution et votre inspiration;) –