Как сохранить NSView без перезаписи переменных экземпляра initWithFrame:?
Какао новичок здесь. Я пытался закодировать переменную экземпляра внутри NSView, чтобы сохранить в файл. Но всякий раз, когда я кодирую его, он перезаписывается (ноль) при вызове initWithFrame:. Есть ли способ, которым я могу пропустить это поведение и загрузить переменные экземпляра в разархивированный 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: комментарии к журналу, и я снова получаю зеленый экран. Судя по всему, единственный способ отделить данные от представления. Но если есть более простой способ, кто-нибудь может мне помочь?
1 ответ
Эта часть вашего кода не имеет смысла...
@implementation Tragic {
NSColor *color;
}
Вы не объявляете переменные экземпляра в файле реализации (".m"). Вы делаете это в файле интерфейса (".h"). Файл.m также не должен иметь этих скобок вокруг оператора реализации.
Вы можете создать переменную цвета в файле.m, но она не будет переменной "экземпляра", доступной из других классов, и если вы сделаете это, она не должна быть в скобках.