首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码/解码NSImage

编码/解码NSImage
EN

Stack Overflow用户
提问于 2013-04-15 00:08:06
回答 2查看 546关注 0票数 0

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

Warning - attempting to encode NSCGSImageRep

Warning - attempting to decode NSCGSImageRep

这是我的.m:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
#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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-15 00:24:55

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

关于如何将图像转换为NSData,请参阅此处的答案:

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

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

票数 3
EN

Stack Overflow用户

发布于 2019-12-29 05:52:41

在macOS 10.15上,我可以毫无问题地对NSImages进行编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16001144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档