[Résolu]NSOpen ? et image jpeg

clampinclampin Membre
novembre 2006 modifié dans API AppKit #1
Bonjour,

Je me suis fait une petite cocoa-application qui possède une fenêtre avec un NSImageView

j'ai donc dans mon comme fichier d'en tête controller.h

<br /><br />#import &lt;Cocoa/Cocoa.h&gt;<br /><br />@interface controller : NSObject<br />{<br />    IBOutlet id ImageView;<br />}<br />- (IBAction)ouvrirFichier:(id)sender;<br />@end<br />


Jusque là  rien de bien difficile

dans mon controller.m

<br /><br />#import &quot;controller.h&quot;<br /><br />@implementation controller<br /><br />-(void)openPanelDidEnd:(NSOpenPanel *)openPanel<br />			returnCode:(int)returnCode<br />		   contextInfo:(void *)x<br />{<br />	NSString *path;<br />	NSImage *image;<br />	<br />	if(returnCode == NSOKButton) {<br />		path = [openPanel filename];<br />		image = [[NSImage alloc] initWithContentsOfFile:path];<br />		[ImageView setImage:image];<br />		[image release];<br />	}<br />}<br /><br />- (IBAction)ouvrirFichier:(id)sender<br />{<br />	NSOpenPanel *panel = [NSOpenPanel openPanel];<br />	<br />	[panel beginSheetForDirectory:nil<br />							 file:nil<br />							types:[NSImage imageFileTypes]<br />					modalDelegate:self<br />				   didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:)<br />					  contextInfo:nil];<br />}<br /><br />@end<br />


Je me suis basé sur les codes du livre cocoa par la pratique au chapitre 13

Or à  la compilation il me met un warning

<br />/Users/davidremacle/Developpement/cocoa/PictureView/controller.m:29: warning: &#39;NSOpenPanel&#39; may not respond to &#39;-beginSheetForDirectory:file:types:modalDelegate:didEndSelector:contextInfo:&#39;<br />/Users/davidremacle/Developpement/cocoa/PictureView/controller.m:29: warning: (Messages without a matching method signature<br />


et à  l'exécution forcément mon menu open ne fonctionne pas :( vu que j'ai relié mon action au menu open.

Que dois-je faire en plus ?

Réponses

  • BruBru Membre
    23:56 modifié #2
    dans 1162559322:

    Que dois-je faire en plus ?


    Peut-être taper correctement les exemples que tu utilises...

    La méthode beginSheetForDirectory:file:types:modalDelegate:didEndSelector:contextInfo: que tu utilises n'existe tout simplement pas (d'où le warning à  la compilation).

    Il manque le paramètre modalForWindow: que tu dois insérer entre types: et modalDelegate: :
    <br />[panel beginSheetForDirectory:nil<br />&nbsp; &nbsp; file:nil<br />&nbsp; &nbsp; types:[NSImage imageFileTypes] <br />&nbsp; &nbsp; modalForWindow:[ImageView window]&nbsp; &nbsp; // &lt;-- le paramètre manquant !<br />&nbsp; &nbsp; modalDelegate:self<br />&nbsp; &nbsp; didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:)<br />&nbsp; &nbsp; contextInfo:nil];<br />
    


    .
  • Eddy58Eddy58 Membre
    23:56 modifié #3
    Décidément elle ne te réussi pas cette méthode Clampin ! ;)
  • clampinclampin Membre
    23:56 modifié #4
    bon en effet et merci, j'ai vu l'erreur après avoir fait un tour dehors et aéré mon (petit) cerveau.

    en fait ce qui se passe, c'est que j'ai tellement envie de voir mon application tourner que je vais trop vite.... alors ben oui, je fais des gaffes grosse comme des maison... oublier de dire que c'est le NSImageView de la fenêtre qui doit recevoir les images.... c'est effectivement très très con....

    maintenant ça tourne bien .... :P

    Mais avec mes échec je comprends mieux rassurez vous..... si si .... mais parfois, j'ai l'impression de ne pas avoir les yeux en face des trous....
  • AliGatorAliGator Membre, Modérateur
    23:56 modifié #5
    Un petit conseil : apprend vite à  utiliser :
    1) Les TextMacros (qui te permettent en tapant un moc clé puis 'esc' qu'il te remplace le mot clé par du texte, voire tout un bloc de texte, pratique pour tous les snippets de code classiques, comme un while sur un NSEnumerator ou encore le modèle d'une méthode comme "openPanelDidEnd" ou des trucs comme ça
    2) L'autocomplétion proposée par Xcode, qui te propose les méthodes disponibles et te les complètent, en te mettant des placeholders aux endroits que tu dois remplir (remplacer par des variables de ton code ou des valeurs)

    Avec ces 2 trucs pratiques intégrés à  Xcode, et en particuler l'autocomplétion (les Text Macros sont pratiques mais bien plus efficaces si tu les personnalise un peu, alors que l'autocompletion est utilisable directement), Xcode t'aurais directement proposé les méthodes qui existent, et sans fautes de frappe  ;)
  • clampinclampin Membre
    23:56 modifié #6
    dans 1162574615:

    Un petit conseil : apprend vite à  utiliser :
    1) Les TextMacros (qui te permettent en tapant un moc clé puis 'esc' qu'il te remplace le mot clé par du texte, voire tout un bloc de texte, pratique pour tous les snippets de code classiques, comme un while sur un NSEnumerator ou encore le modèle d'une méthode comme "openPanelDidEnd" ou des trucs comme ça
    2) L'autocomplétion proposée par Xcode, qui te propose les méthodes disponibles et te les complètent, en te mettant des placeholders aux endroits que tu dois remplir (remplacer par des variables de ton code ou des valeurs)

    Avec ces 2 trucs pratiques intégrés à  Xcode, et en particuler l'autocomplétion (les Text Macros sont pratiques mais bien plus efficaces si tu les personnalise un peu, alors que l'autocompletion est utilisable directement), Xcode t'aurais directement proposé les méthodes qui existent, et sans fautes de frappe  ;)


    Justement c'est ce que je ne parvient pas encore a bien maà®triser. (et ça m'énerve un peu car c'est perturbant ce menu qui s'affiche... et du coup.... ça foire, alors je ne l'utilise pas vraiment)... je vais donc choper le truc, car sans doute que bien maà®trisé ça doit accélérer  la frappe du code...

    Je continue donc...
  • clampinclampin Membre
    23:56 modifié #7
    Bonjour

    Question pratique, est-ce qu'il vaut mieux utiliser une sheet pour l'open panel ou pas ?

    Quels sont les avantages et ou inconvénients a utiliser l'une ou l'autre ?

    A+
  • Eddy58Eddy58 Membre
    23:56 modifié #8
    La seule différence est au niveau esthétique, personnellement je préfère les sheet (pas seulement pour les panel), c'est beaucoup plus propre. :)
  • BruBru Membre
    23:56 modifié #9
    Pour moi :

    - le panel : bloque entièrement l'appli.
    - le sheet : ne bloque que la fenêtre à  laquelle il est attaché (les autres fenêtres ou les préférences restent fonctionnelles).

    Une boite d'ouverture de fichier devrait donc être en panel (puisque la fenêtre -du document- n'existe pas encore). A l'opposé, la boite de sauvegarde devrait être en sheet (uniquement attachée à  la fenêtre du document à  sauvegarder).

    .
Connectez-vous ou Inscrivez-vous pour répondre.