2009-11-02 2 views
0

Il a été suggéré que j'utilise cette ligne de code pour appeler une image de mon dossier de ressources/ensemble de projets. Je vois aussi qu'il est utilisé exactement comme ça sur de nombreux tutoriels différents sur le site.Cocoa - problème avec ce code en utilisant NSBundle

NSBundle *mb=[NSBundle mainBundle]; 


NSString *fp=[mb pathForResource:@"topimage" ofType:@"PNG"]; 


NSImage *image=[NSImage initWithContentsOfFile:fp]; 

Cependant, je reçois l'avertissement suivant:

NSImage peut ne pas répondre à + initWithContentsOfFile +

La documentation NSImage montre que initWithContentsOfFile est en fait une méthode qui devrait fonctionner . Que pourrais-je manquer ici?

+0

C'est "Mac" pas "MAC" - deux sujets très différents. –

Répondre

5

vous manque un +alloc

NSImage* image = [[NSImage alloc] initWithContentsOfFile:fp]; 

Vous pouvez également utiliser +imageNamed:, qui va chercher des images de votre paquet principal.

NSImage* image = [NSImage imageNamed:@"topImage.png"]; 
+0

Merci! Exactement ce que le problème était – Brian

4

initWithContentsOfFile: est une méthode d'instance, mais vous envoyez ce message à la classe NSImage. Vous devez l'envoyer à une instance, en particulier une instance fraîchement allouée.

C'est là qu'intervient alloc. C'est une méthode de classe qui alloue une instance, que vous envoyez ensuite immédiatement le message init… (comme Darren l'a montré). N'oubliez pas de libérer l'instance lorsque vous avez terminé. Je libère généralement l'instance immédiatement après l'avoir initialisée; Ensuite, Cocoa va libérer l'instance pour moi à un moment approprié. Voir le Memory Management Programming Guide for Cocoa pour plus d'informations.