0

这里是可可新手。我试图在 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: 日志注释中恢复为空,并且我再次获得绿屏。从外观上看,唯一的方法似乎是将数据与视图分离。但如果有更简单的方法,任何人都可以帮助我吗?

4

1 回答 1

-3

你的这部分代码没有意义......

@implementation Tragic {
NSColor *color;

}

您不在实现(“.m”)文件中声明实例变量。您可以在接口 (".h") 文件中执行此操作。.m 文件也不应该在实现语句周围有这些括号。

您可以在 .m 文件中创建颜色变量,但它不会是可从其他类访问的“实例”变量,并且如果您这样做,它不应该在任何括号内。

于 2013-04-13T23:51:32.107 回答