Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSImage readFromData问题_Cocoa_Macos_Nsimage_Nsdocument - Fatal编程技术网

Cocoa NSImage readFromData问题

Cocoa NSImage readFromData问题,cocoa,macos,nsimage,nsdocument,Cocoa,Macos,Nsimage,Nsdocument,我正在尝试制作一个简单的基于文档的cocoa应用程序,它可以在pdf文件中保存和加载图像 对于保存部分,我使用 - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError { return [imageView dataWithPDFInsideRect:[imageView bounds]]; } - (BOOL)readFromData:(NSData *)data ofType:(NSString

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

对于保存部分,我使用

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
    return [imageView dataWithPDFInsideRect:[imageView bounds]];
}
- (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;
}
这样,图像可以保存到PDF文件中

对于加载部分,我使用

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
    return [imageView dataWithPDFInsideRect:[imageView bounds]];
}
- (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打印出图像不为空:

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中发生了什么导致外部错误的问题!=此处为NULL。

您正在从调用的任何对象传递外部错误-readFromData:类型:错误:。更重要的是,outError是一个指向指针的指针。您应该检查的是:

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

正在成功创建您的映像

您不太了解error参数是如何工作的。您的
-readFromData:ofType:error:
方法将被传递一个指向指针的指针,如果从NSData实例创建映像失败,您可以使用


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

如果您在阅读文档时出错,可以设置outError。它不会告诉您代码是否失败。这就是你如何告诉打电话的人出了什么问题。[NSImage initWithData:]如果失败,则返回nil,因此您需要更改:

if (outError != NULL) {
致:


找出错误是好的第一步。问题解决了。错误处理不正确。但另一个问题是:我试图从加载的映像更新一个视图(属于另一个类),该视图在调用readFromData:时尚未初始化,因此我将消息发送给了一个nil对象。因此,我在类中声明了一个新的NSImage属性,以保持从readFromData:加载的图像,并更新windowControllerDidLoadNib:中的视图。它起作用了。有更简单的方法吗?即使删除整个“if(outError!=NULL)”部分,它也不起作用。以前保存的pdf图像加载为空图像。更好的是,Cocoa的错误处理编程指南:特别是“使用和创建错误对象”部分。