Ouvrire que des dossiers

elfelf Membre
03:44 modifié dans API AppKit #1
Je sais que c'est une question basique, mais comment je fais pour faire un NSOpenPanel qui choisis que des dossiers????

Chez moi quand je fais un simple setCanChooseFolders (je crois, j'ai pas le code sous la main) ça me fait crasher mon app.

Réponses

  • BruBru Membre
    03:44 modifié #2
    Ca a toujours été setCanChooseFiles:NO et setCanChooseDirectories:YES.
    Si ça plante, c'est que ton code est pourri autre part.

    .
  • elfelf Membre
    03:44 modifié #3
    Voilà  tout mon code en entier pour faire fonctionner ma tableview!

    id cell;<br />		NSTableColumn *theColumn;<br />		<br />		theColumn = [table tableColumnWithIdentifier:@&quot;icon&quot;];<br />		[table setRowHeight:32];<br />		[theColumn setWidth:[table rowHeight]];<br />		<br />		cell = [NSImageCell new];<br />		[theColumn setDataCell:cell];		<br />
    


    et

    <br />- (int)numberOfRowsInTableView:(NSTableView *)view<br />{<br />&nbsp; &nbsp; return [folders count];<br />}<br /><br />- (id)tableView:(NSTableView *)view objectValueForTableColumn:(NSTableColumn *)col row:(int)row<br />{<br />&nbsp; &nbsp; if ([[col identifier] isEqualTo: @&quot;icon&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; return [[NSWorkspace sharedWorkspace] iconForFile:[folders objectAtIndex:row]];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; else if ([[col identifier] isEqualTo: @&quot;Folder&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; return [[folders objectAtIndex:row] lastPathComponent];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; else if ([[col identifier] isEqualTo: @&quot;Path&quot;]) {<br />&nbsp; &nbsp; &nbsp; &nbsp; return [folders objectAtIndex:row];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; return nil;<br />}<br /><br />- (IBAction)plusFolder:(id)sender<br />{<br />	NSOpenPanel *openPanel = [NSOpenPanel openPanel];<br />	<br />	[openPanel setAllowsMultipleSelection:NO];<br />	[openPanel setDelegate:self];<br />	[openPanel setTitle:@&quot;Get icons from folder&quot;];<br />	[openPanel setCanChooseDirectories:YES];<br />	[openPanel setCanChooseFiles:YES];<br />		<br />	if ([openPanel runModalForTypes:nil] == NSOKButton)<br />		[folders addObject:[openPanel filename]];<br />	else<br />		return;	<br />}<br /><br />- (IBAction)minusFolder:(id)sender<br />{<br />	[folders removeObjectAtIndex:[table selectedRow]];<br />}<br />
    


    (plusFolder et minusFolder sont les action des boutons pour ajouter ou suprimmer une entrée)

    ça s'affiche bien mais ça plante quand je veut ajouter ou suprimer une entrée.
  • BruBru Membre
    03:44 modifié #4
    Ton code m'a l'air OK (sauf qu'il manque un ; dans les méthodes d'ajout/suppression).
    Je l'ai recopié, et testé...
    Et bien sûr je n'ai pas de plantage.

    Te connaissant, et comme à  ton habitude, tu ne fournis rien d'autre que un "ça plante" (pas de log), je suppute un problème de mémoire...
    Où et comment as-tu déclaré folders (que je suppose être un NSMutableArray, car là  aussi tu ne dis rien) ?

    Bon, la séance de divination est terminée.

    .
  • elfelf Membre
    03:44 modifié #5
    folders est effectivement un NSMutableArray

    L'application ne plante pas à  vrai dire, mais si je charge une fois le panel dans lequel la tableview est (c'est un screensaver) ça marche (mais ça met une eternité à  charger les données, ça doit être à  cause de mon oubli de ; Par contre, la 2e fois que je l'ouvre, le panel deviens tout blanc et System Preferences freeze...

    ça m'a effectivement l'air d'un problème de mémoire, mais j'ai déjà  tout vérifier et je ne trouve rien.
Connectez-vous ou Inscrivez-vous pour répondre.