Drag & Drop, gros problème.
tablier
Membre
Je souhaite faire des glisser-déposer sur une fenêtre pour récupérer les noms des fichiers déposés sur la fenêtre.
Je met le "delegate de la fenêtre sur un contrôleur et J'enregistre la fenêtre dans awakeFromNib:
J'en conclus que le "drag & drop" est interrompu par l'exécution du NSTask, ce qui le plante.
Je ne sais pas comment m'en sortir sur ce coup!
Qui aurait une idée?
Je met le "delegate de la fenêtre sur un contrôleur et J'enregistre la fenêtre dans awakeFromNib:
puis, comme dans le précise la documentation j'ai:[o_fenetre registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]] ;
Mon problème: Je veux pouvoir glisser-déposer soit des fichiers de type texte soit des applications. Les textes sont utilisés comme données, mais les applications sont lancées par un NSTask. Le glisser-déposer des textes ne pose aucun problème! Par contre si je dépose une application, elle s'exécute correctement, je récupère les données en retour, puis, juste après j'obtiens systématiquement l'erreur:- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{ return (NSDragOperationEvery) ; }
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{ return (!encours) ; }
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
{
NSPasteboard *pboard = [sender draggingPasteboard];
if ( pboard types] containsObject:NSFilenamesPboardType] )<br /> {<br /> NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];<br /> if ([files count] > 0)<br /> { [litem setString: [NSString stringWithString:[files objectAtIndex:0] ;
return [litem length] != 0 ; } ;
} ;
return NO ;
}
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
{
[self faireLeBoulot:litem] ; // paramètres de travail
}
et mon application s'arrête. Pour vérifier, j'ai supprimé le NSTask et je ne fais qu'afficher le nom de l'appli. Dans ce cas plus d'erreur!Canceling drag because exception 'NSInvalidArgumentException' (reason '*** -[NSCFArray insertObject:atIndex:]: attempt to insert nil') was raised during a dragging session
J'en conclus que le "drag & drop" est interrompu par l'exécution du NSTask, ce qui le plante.
Je ne sais pas comment m'en sortir sur ce coup!
Qui aurait une idée?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour info, l'application lancée est un AppleScript compilé qui ouvre un nouveau message dans mail, le tout sous un environnement qui fait fonctionner le "Apple Event Logging". Je sais, pas très simple, beaucoup de chose à la fois!
D'autre part je lance le NSTask en mode "waitUntilExit". Je me demande si ce n'est pas ça qui me plante le drag&drop.
Y'a de fortes chances
Il y a aussi les NSOperation et NSOperationQueue qui permettent d'attendre la fin du process lancé NSOperation waitUntilFinished
ça ne te fera certainement pas moins de code mais ça s'intégrera peut être mieux au niveau de la "RunLoop" ?