Cocoa NSImage readFromData问题
我正在尝试制作一个简单的基于文档的cocoa应用程序,它可以在pdf文件中保存和加载图像 对于保存部分,我使用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
- (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的错误处理编程指南:特别是“使用和创建错误对象”部分。