【发布时间】:2009-12-26 03:25:38
【问题描述】:
我正在尝试制作一个简单的基于文档的可可应用程序,它可以在 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 在这里。
【问题讨论】:
-
找出错误所在是很好的第一步。
-
问题解决了。错误处理不正确。但还有一个问题是:我试图从加载的图像中更新一个视图(属于另一个类),在调用 readFromData: 时视图尚未初始化,所以我将消息发送到一个 nil 对象。因此,我在类中声明了一个新的 NSImage 属性,以保持从 readFromData: 加载图像并更新 windowControllerDidLoadNib: 中的视图。有用。有更简单的方法吗?
标签: cocoa macos nsimage nsdocument