2009-12-26 94 views
0

我想製作一個簡單的基於文檔的可可應用程序,可以保存和加載PDF文件中的圖像。NSImage readFromData問題

對於保存部分,我使用

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError 
{ 
    return [imageView dataWithPDFInsideRect:[imageView bounds]]; 
} 

而且這個作品,圖像可以被保存到一個PDF文件。

對於負載的一部分,我使用

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError 
{ 
    NSData *dataFromFile = [data retain]; 
    NSImage *image = [[NSImage alloc] initWithData:dataFromFile]; 
    NSLog(@"Load image as: %@", image); 
    // Do something about the image 
    if (outError != NULL) { 
     NSLog(@"Error when loading data ..."); 
     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; 
     return NO; 
    } 
    return YES; 
} 

這總是失敗,但的NSLog打印出的圖像不是NULL:

Load image as: NSImage 0x16ead890 Size={1023, 601} Reps=(NSPDFImageRep 0x16e97480 Size={1023, 601} ColorSpace=NSCalibrateRGBColorSpace BPS=0 Pixels=1023x601 Alpha=NO) 

Error when loading data ... 

我不太明白是什麼問題發生在readFromData中,這使outError!= NULL在這裏。

+0

找出的錯誤是什麼將是一個良好的開端。 – 2009-12-26 03:36:44

+0

問題解決了。 錯誤處理不正確。 但還有一個問題是:我試圖從加載的圖像更新視圖(它屬於另一個類),該視圖沒有被readFromData初始化:被調用,所以我發送消息到零目的。 所以我在類中聲明瞭一個新的NSImage屬性,以保持從readFromData加載的圖像:並更新windowControllerDidLoadNib:中的視圖。有用。 任何更簡單的方法來做到這一點? – ccy 2009-12-26 08:00:25

回答

0

你正在調用-readFromData:ofType:error :.更何況,outError是一個指針指針。你應該檢查的是:正在創建成功

if (outError != nil && *outError != nil) {... 
+0

即使在刪除整個「if(outError!= NULL)」部分後,它也不起作用。 先前保存的pdf圖像作爲空圖像加載。 – ccy 2009-12-26 04:00:54

1

您的圖片。

您不太瞭解錯誤參數的工作方式。您的-readFromData:ofType:error:方法將指針指向一個指針,您可以使用如果您無法從NSData實例創建圖像。

您應該閱讀關於NSError的文檔,以瞭解如何創建和使用NSError實例。

+0

更好的是,Cocoa錯誤處理編程指南:http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/特別是「使用和創建錯誤對象」部分。 – 2009-12-26 06:22:58

0

如果讀取文檔時發生錯誤,您可以設置outError。它不會告訴你你的代碼是否失敗。這就是你如何告訴來電者出了什麼問題。 [NSImage中initWithData:]返回nil如果失敗了,所以你需要改變:

if (outError != NULL) { 

到:

if (image == NULL) {