我是Cocoa的新手。我试图在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: log注释中恢复为空,并且我再次获得绿色屏幕。从表面上看,唯一的方法似乎是将数据从视图中分离出来。但如果有更简单的方法,有人能帮我吗?
这部分代码没有意义…
@implementation Tragic {
NSColor *color;
}
不能在实现(".m")文件中声明实例变量。在接口(".h")文件中完成。.m文件也不应该在实现语句周围有这些括号。
你可以在。m文件中创建color变量,但它不能是一个可以从其他类访问的"实例"变量,如果你这样做了,它不应该在任何括号内。