2010-12-15 60 views
5

我玩了AppKit和NSDocument,我不知道這是爲什麼不工作?:NSURL→NSImage中→NSImageView

我只是寫這一點,圖像不爲零,但從來沒有加載任何圖像,其大小爲始終爲零。 這是我必須實現的將文件讀入我的文檔的正確方法嗎? 我需要的路徑,而不是數據(NSData),因爲我打算使用其他庫來讀取其他文件。

現在我正在嘗試閱讀PNG,JPG,沒有任何工作。 (

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

在此先感謝

+2

+1的使用→';) – Jakub 2010-12-15 20:01:53

回答

6

如果正在從NIB文件中加載的ImageView,它不會被設置時readFromURL:ofType: error:被調用,而應該加載圖像並將其存儲在實例變量中,然後將其添加到windowControllerDidLoadNib:方法中的imageView中,並且每次都返回一個錯誤,而只應返回一個錯誤if出了點問題

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

只要確保你添加一個NSImage *圖像;實例變量添加到頭文件中。

+1

很棒的回答。 「unimpErr」佔位符錯誤等同於「未實現的錯誤」,這實際上只是在開發人員還沒有完善該方法的情況下。在加載失敗的圖像的情況下,使用Cocoa的NS FileCorrupt 代碼(對不起,不確定確切的枚舉名稱)可能更有意義。感謝它的工作, – NSGod 2010-12-15 21:34:11

+0

;) – nacho4d 2010-12-16 06:51:52

6

這樣來做:

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

我在Mac OS上,AppKit。因此,沒有UIImage馬特。編輯並測試了 – nacho4d 2010-12-15 19:28:34

+0

。這種方式將起作用。 – 2010-12-15 20:13:52