这里是可可新手。我试图在 NSView 中对实例变量进行编码以保存到文件中。但是,每当我对其进行编码时,它都会在调用 initWithFrame: 时被覆盖为 (null)。有没有办法可以跳过这种行为并将实例变量加载到未归档的 NSView 上?这是我的代码:
#import "Tragic.h"
@implementation Tragic {
NSColor *color;
}
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
NSLog(@"%@",color);
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
if(!color) {
color = [NSColor greenColor];
}
[color set];
color = [NSColor yellowColor];
NSRectFill([self bounds]);
}
-(void)encodeWithCoder:(NSCoder *)aCoder {
[super encodeWithCoder:aCoder];
[aCoder encodeObject:color forKey:@"color"];
}
-(id)initWithCoder:(NSCoder *)aDecoder {
if(self = [super initWithCoder:aDecoder]) {
color = [aDecoder decodeObjectForKey:@"color"];
}
return self;
}
@end
在上面的代码中,我首先将要填充的颜色设置为绿色,然后在 drawRect: 方法完成后将其更改为黄色,因此保存的颜色为黄色。但尽管如此,它在 initWithFrame: 日志注释中恢复为空,并且我再次获得绿屏。从外观上看,唯一的方法似乎是将数据与视图分离。但如果有更简单的方法,任何人都可以帮助我吗?