NSImage readFromData问题

时间:2009-12-26 03:25:38

标签: cocoa macos nsimage nsdocument

我正在尝试制作一个简单的基于文档的cocoa应用程序,可以在pdf文件中保存和加载图像。

对于保存部分,我正在使用

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

3 个答案:

答案 0 :(得分:1)

您的图片已成功制作。

您不太了解错误参数的工作原理。您的-readFromData:ofType:error:方法被指向指针,您可以使用如果在从NSData实例创建图像时失败。

您应该阅读有关NSError的文档,以了解如何创建和使用NSError实例。

答案 1 :(得分:0)

你从任何调用-readFromData:ofType:error:传递outError。更重要的是,outError是一个指向指针的指针。你应该检查的是:

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

答案 2 :(得分:0)

如果您在阅读文档时出错,

outError可供您设置。它不会告诉您代码是否失败。这是你如何告诉来电者出了什么问题。 [NSImage initWithData:]如果失败则返回nil,因此您需要更改:

if (outError != NULL) {

为:

if (image == NULL) {