0

我正在尝试制作一个简单的基于文档的可可应用程序,可以在 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 在这里。

4

3 回答 3

1

您的图像正在成功创建。

您不太了解错误参数的工作原理。您的-readFromData:ofType:error:方法将获得一个指向指针的指针,如果您无法从 NSData 实例创建图像,则可以使用该指针。

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

于 2009-12-26T03:44:10.070 回答
0

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

if (outError != nil && *outError != nil) {...
于 2009-12-26T03:33:04.067 回答
0

如果您在阅读文档时出错,您可以设置 outError。它不会告诉您您的代码是否失败。这是您告诉呼叫者出了什么问题的方式。[NSImage initWithData:] 如果失败则返回 nil,所以你需要更改:

if (outError != NULL) {

至:

if (image == NULL) {
于 2009-12-26T06:40:47.497 回答