2010-12-15 13 views
5

estoy jugando con AppKit y NSDocument y yo no sé por qué esto no está funcionando ?:NSURL → → NSImage NSImageView

acaba de escribir este y la imagen no es nula, pero nunca se carga cualquier imagen, su tamaño es siempre cero. ¿Es este el método correcto que debo implementar para leer archivos en mi documento? Necesito la ruta, no los datos (NSData) porque planeo usar otra biblioteca para leer otros archivos.

Ahora estoy tratando de leer PNG, JPG, ninguno funcionó. ; (

- (BOOL) readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError **)outError{ 

    NSImage *image = nil; 
    image = [[NSImage alloc] initWithContentsOfURL:url]; 

    [imageView setImage:image]; 
    [image release]; 

    if (outError != NULL) { 
     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; 
    } 
    return YES; 
} 

Gracias de antemano

+2

+1 para el uso de → 's;) – Jakub

Respuesta

6

Si imageView se carga desde un archivo SEMILLA, que no se han establecido cuando readFromURL: OfType: error: se invoca. En su lugar, debe cargar la imagen y almacenarla en una variable de instancia, luego agregarla a la vista de imagen en el método windowControllerDidLoadNib: Además, está devolviendo un error cada vez, mientras que solo debe devolver un error si algo va mal.

- (void)windowControllerDidLoadNib:(NSWindowController *)windowController { 
    [imageView setImage:image]; 
    [image release]; 
    image = nil; 
} 
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError **)outError { 
    image = [[NSImage alloc] initWithContentsOfURL:url]; 
    if(!image) { 
     if(outError) *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; 
     return NO; 
    } 
    return YES; 
} 

Solo asegúrese de agregar una imagen NSImage *; variable de instancia a su archivo de encabezado.

+1

Gran respuesta. El error de marcador de posición "unimpErr" equivale a "Error no implementado", que realmente existe en caso de que el desarrollador aún no haya desarrollado ese método. En el caso de cargar una imagen que falla, probablemente tendría más sentido usar uno de los códigos NS FileCorrupt de Cocoa (lo siento, no estoy seguro del nombre enum exacto). – NSGod

+0

gracias funcionó;) – nacho4d

6

hacerlo de esta manera:.

NSImage *image = [[NSImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]]; 
+1

Estoy en Mac OS, AppKit. Por lo tanto, no hay UIImage Matt. – nacho4d

+0

editado y probado. De esa forma funcionará. –