Cacao - problema con este código usando NSBundle
Pregunta
Se sugirió que yo uso esta línea de código para llamar a una imagen de mi paquete de recursos carpeta / proyecto. También veo que está siendo utilizado exactamente como este en muchos tutoriales diferentes sitios web.
NSBundle *mb=[NSBundle mainBundle];
NSString *fp=[mb pathForResource:@"topimage" ofType:@"PNG"];
NSImage *image=[NSImage initWithContentsOfFile:fp];
Sin embargo, estoy recibiendo la advertencia siguiente:
NSImage no puede responder a + initWithContentsOfFile +
La documentación para NSImage muestra que initWithContentsOfFile es en realidad un método que se debe trabajar. Lo que puede ocurrir la falta aquí?
Solución
Te estás perdiendo un +alloc
NSImage* image = [[NSImage alloc] initWithContentsOfFile:fp];
También puede utilizar +imageNamed:
, que obtiene imágenes de su paquete principal.
NSImage* image = [NSImage imageNamed:@"topImage.png"];
Otros consejos
initWithContentsOfFile:
es un método de instancia, pero que va a enviar ese mensaje a la clase NSImage. Es necesario enviar a una instancia específica, una instancia asignado recién.
Aquí es donde entra en juego alloc
. Es un método de clase que asigna una instancia, que luego se envía inmediatamente el mensaje init…
(como Darren mostró).
No se olvide de liberar la instancia cuando haya terminado con él. I generalmente AutoRelease la instancia inmediatamente después de Initing ella; a continuación, cacao dará a conocer el ejemplo para mí en un momento apropiado. Ver las href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/" de cacao para más información .