2010-12-15 5 views
5

je joue avec AppKit et NSDocument et je ne sais pas pourquoi cela ne fonctionne pas ?:NSURL → NSImage → NSImageView

Je viens d'écrire cela et l'image est non nul, mais jamais charge aucune image, sa taille est toujours zéro. Est-ce la bonne méthode que je dois implémenter pour lire des fichiers dans mon document? J'ai besoin du chemin, pas des données (NSData) car j'ai l'intention d'utiliser une autre bibliothèque pour lire d'autres fichiers. Maintenant, j'essaie de lire les fichiers PNG, JPG, aucun n'a fonctionné. ; (

- (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; 
} 

Merci à l'avance

+2

+1 pour l'utilisation de →; s;) – Jakub

Répondre

6

Si imageView est chargé à partir d'un fichier NIB, il n'aura pas été réglée lors readFromURL: ofType: error: est appelé, vous devez charger l'image et la stocker dans une variable d'instance, puis l'ajouter à imageView dans la méthode windowControllerDidLoadNib: De plus, vous renvoyez une erreur à chaque fois, alors que vous ne devez renvoyer qu'une erreur si quelque chose ne va pas

- (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; 
} 

Assurez-vous simplement d'ajouter une image NSImage *; variable d'instance à votre fichier d'en-tête.

+1

Bonne réponse. L'erreur d'espace réservé "unimpErr" équivaut à "erreur non implémentée", qui est là juste au cas où le développeur n'a pas encore étoffé cette méthode. Dans le cas du chargement d'une image qui échoue, il serait probablement plus logique d'utiliser l'un des codes de FileCorrupt de Cocoa (désolé, pas sûr du nom exact de l'énumération). – NSGod

+0

merci cela a fonctionné;) – nacho4d

6

faire de cette façon.

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

Je suis sur Mac OS, AppKit. Par conséquent, il n'y a pas UIImage Matt. – nacho4d

+0

édité et testé. De cette façon fonctionnera. –