2013-04-13 2 views
0

코코아 초보자가 여기 있습니다. 파일에 저장하기 위해 NSView 내부에서 인스턴스 변수를 인코딩하려고했습니다. 하지만 인코딩 할 때마다 initWithFrame :이 호출 될 때 (null로) 겹쳐 쓰여지고 있습니다. 이 동작을 건너 뛰고 아카이브되지 않은 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 : log 주석에서 null로 바뀌고 녹색 화면이 다시 나타납니다. 보이는 것에서 볼 때 유일한 방법은 데이터를 뷰에서 분리하는 것입니다. 그러나 더 간단한 방법이 있다면 아무도 나를 도울 수 있습니까? 당신은 구현 ("하는 .m") 파일에 인스턴스 변수를 선언하지

@implementation Tragic { 
NSColor *color; 

} 

+0

어떻게 저장됩니까? 언제 인코딩하는거야? 그리고 인코딩하면, initWithFoder가 아닌 initWithCoder : 메소드를 사용하여 다시 작성해야합니다. 위의 코드는 지저분하지만 올바르게 사용하면 작동합니다. – Wain

+0

문서 기반 응용 프로그램을 사용하고 있습니다. 그리고 이것은 문서가 저장 될 때 인코딩됩니다. NSKeyedArchiver를 사용하여 보관 처리되는 메인 파일의 콘센트가 있습니다. –

+1

그래서 앱을 구조화하는 올바른 방법은 문서에 color 속성을두고 문서의 다른 내용과 함께 color 속성을 저장 한 다음보기에 전달하는 것입니다. 문서 제어기가 통과해야합니다. 이것은 MVC 구조의 기본입니다 - 모델은 데이터를 저장하고,보기는 그것을 표시하고, 컨트롤러는 컨트롤러를 중재합니다. – Wain

답변

-3

코드의이 부분은 이해가되지 않습니다 .... 인터페이스 (".h") 파일에서 그렇게합니다. .m 파일은 구현 문 주위에 대괄호가 없어야합니다.

.m 파일에서 색상 변수를 만들 수 있지만 다른 클래스에서 액세스 할 수있는 "인스턴스"변수가 아니며,이를 수행하는 경우 대괄호 안에 있으면 안됩니다.

+0

최근 컴파일러에서 다루지 않습니다. 이것은 현재 완전히 지원됩니다. –

+0

정보 주셔서 감사합니다. – regulus6633

+0

이 질문에 어떻게 대답합니까? 게다가'iVar'를 구현에 추가 할 수 없다는 진술은 incorect입니다. – Cristik

관련 문제