【问题标题】:Encoding/decoding NSImage编码/解码 NSImage
【发布时间】:2013-04-06 17:44:02
【问题描述】:

我正在开发一个 OSX 应用程序,需要保存自定义类的信息,所以我尝试使用 NSCoder 对其进行索引;但是,我在类中尝试编码/解码的对象之一是 NSImage,每次我尝试运行 encodeWithCoder: 或 initWithCoder: 时都会出现以下两条错误消息之一:

Warning - attempting to encode NSCGSImageRep
Warning - attempting to decode NSCGSImageRep

这是我的 .m:

@implementation Subject

-(id) init{
    self = [super init];
    if (self) {
        self.ad = [[NSApplication sharedApplication] delegate];
        self.editViewController = self.ad.editViewController;
        self.name = @"";
        self.teacher = @"";
        self.mainPeriod = 1;
    }

    return self;
}
-(void) encodeWithCoder: (NSCoder *) coder{
    [coder encodeObject:self.name forKey:@"name"];
    [coder encodeObject:self.teacher forKey:@"teacher"];
    NSNumber *periodNumBox = [NSNumber numberWithInt:self.mainPeriod];
    [coder encodeObject:periodNumBox forKey:@"mainPeriod"];
    [coder encodeObject:self.image forKey:@"image"];
}
-(id) initWithCoder: (NSCoder *) coder{
    self.name = [coder decodeObjectForKey:@"name"];
    self.teacher = [coder decodeObjectForKey:@"teacher"];
    NSNumber *periodNumBox = [coder decodeObjectForKey:@"mainPeriod"];
    self.mainPeriod = (int)[periodNumBox integerValue];
    self.image = [coder decodeObjectForKey:@"image"];
    return self;
}
@end

还有我的 .h:

#import <Foundation/Foundation.h>
#import "AppDelegate.h"
#import "EditViewController.h"

@class EditViewController;

@interface Subject : NSObject

@property (weak) AppDelegate *ad;
@property EditViewController *editViewController;

@property NSImage *image;
@property NSString *name;
@property NSString *teacher;
@property int mainPeriod;

@end

【问题讨论】:

标签: ios objective-c macos file-io encoding


【解决方案1】:

这不是您要问的,但它可能是一个值得考虑的解决方案:不要。如果图像在解码时保证存在于其他地方,那么您需要归档的只是图像的 name 或其他 reference。如果图像在解码时不能保证在其他地方存在,则将其保存到磁盘中保证存在的位置,并存档名称或其他引用 给它。

请在此处查看我关于如何将图像转换为 NSData 的回答:

https://stackoverflow.com/a/15694549/341994

NSData 可以直接写入磁盘上的文件。当然,由于 NSData 对象是可存档的,您现在可以将其放入存档中;它将与编码和解码一起使用。但我仍然认为你不应该这样做。

【讨论】:

    【解决方案2】:

    在 macOS 10.15 上,我可以毫无问题地编码 NSImage。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多