2009-12-26 2 views
0

pdf 파일로 이미지를 저장하고로드 할 수있는 간단한 문서 기반 코코아 응용 프로그램을 만들려고합니다. 저장의 경우 NSImage readFromData problem

, 나는

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

오류가 좋은 첫 단계가 될 것입니다 무엇인지 찾기. –

+0

문제가 해결되었습니다. 오류 처리가 잘못되었습니다. 또 하나의 문제는 :로드 된 이미지에서 뷰 (다른 클래스에 속함)를 업데이트하려고했는데, readFromData :가 호출 될 때까지 뷰가 초기화되지 않았기 때문에 메시지를 nil로 보냈습니다. 목적. 그래서 클래스에 새로운 NSImage 속성을 선언하여 이미지를 readFromData에서로드 된 상태로 유지하고 windowControllerDidLoadNib :에서 뷰를 업데이트합니다. 그것은 작동합니다. 더 간단한 방법이 있나요? – ccy

답변

0

-readFromData : ofType : error :를 호출하는 모든 곳에서 outError를 전달합니다. 게다가, outError는 포인터에 대한 포인터입니다. 확인해야 할 내용은 다음과 같습니다.

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

"if (outError! = NULL)"부분 전체를 제거한 후에도 작동하지 않습니다. 이전에 저장 한 pdf 이미지가 빈 이미지로로드됩니다. – ccy

1

이미지가 성공적으로 만들어졌습니다.

오류 매개 변수의 작동 방식을 잘 이해하고 있지 않습니다. -readFromData:ofType:error: 메서드는 포인터에 대한 포인터를 전달받습니다. 을 사용하려면 NSData 인스턴스에서 이미지를 만들 때 실패합니다.

NSError 인스턴스를 만들고 사용하는 방법에 대해 자세히 알아 보려면 NSError 설명서를 읽어야합니다.

+0

오류 처리 프로그래밍 가이드 (Cocoa) : http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ 특히 "오류 객체 사용 및 생성"섹션. –

0

문서를 읽는 중에 오류가 발생하면 outError를 설정해야합니다. 코드가 실패했는지 여부를 알려주지 않습니다. 발신자에게 잘못된 정보를 전달하는 방법입니다. [NSImage initWithData이 :] 실패하면 반환 nil을, 그래서 당신은 변경해야

if (outError != NULL) { 

에 :

if (image == NULL) {