ココア初心者です。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: ログ コメントで null に戻り、再びグリーン スクリーンが表示されます。見た目から、ビューからデータを分離する唯一の方法のようです。しかし、もっと簡単な方法があれば、誰でも私を助けることができますか?