如何在不被 initWithFrame 覆盖的情况下保存 NSView:?



我是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变量,但它不能是一个可以从其他类访问的"实例"变量,如果你这样做了,它不应该在任何括号内。

相关内容

  • 没有找到相关文章

最新更新