2010-12-15 14 views
5

gram z zestawu klas AppKit i NSDocument i nie wiem, dlaczego to nie działa ?:bibliotece NSURL → NSImage → NSImageView

ja po prostu napisał to i obraz nie jest zerowa, ale nigdy nie wczytuje dowolny obraz, jego rozmiar jest zawsze zero. Czy jest to właściwa metoda, którą muszę zaimplementować, aby odczytać pliki w moim dokumencie? Potrzebuję ścieżki, a nie danych (NSData), ponieważ planuję użyć innej biblioteki do odczytu innych plików.

Teraz próbuję odczytać PNG, JPG, żaden nie działał. ; (

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

góry dzięki

+2

+1 do używania →;; – Jakub

Odpowiedz

6

Jeśli ImageView jest ładowany z pliku NIB, to nie zostały ustawione podczas readFromURL: ofType: error: jest wywoływane Zamiast tego należy załadować obraz i zapisać go w zmiennej instancji, a następnie dodać go do imageView w metodzie windowControllerDidLoadNib: Również zwracasz błąd za każdym razem, a powinieneś zwracać błąd tylko jeśli coś poszło nie tak

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

Tylko upewnij się, że dodajesz obraz NSImage *; Zmienna instancji do pliku nagłówkowego.

+1

Świetna odpowiedź. Błąd elementu zastępczego "unimpErr" oznacza "Błąd niezatwierdzony", który jest naprawdę na wypadek, gdyby programista jeszcze nie opracował tej metody. W przypadku ładowania obrazu, który się nie powiedzie, prawdopodobnie lepiej będzie użyć jednego z kodów Cocoa NS FileCorrupt (przepraszam, nie jestem pewien dokładnej nazwy użytkownika). – NSGod

+0

dziękuję to działało;) – nacho4d

6

zrobić w ten sposób.

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

Jestem na Mac OS, AppKit. Dlatego nie ma UIImage Matt. – nacho4d

+0

edytowane i testowane. W ten sposób zadziała. –