2013-08-02 3 views
0

빠른 질문 :클래스의 마스터 클래스에 메시지를 보내는 방법은 무엇입니까?

내가 MainWindowController에서 개체를 만드는 오전 :

-(id)init{ 

    if(!_viewAbout){ 
     [NSBundle loadNibNamed:@"About" owner:self]; 
     [NSApp beginSheet:self.viewAbout modalForWindow:*?????* modalDelegate:self didEndSelector:NULL contextInfo:NULL]; 
    } 
    return self; 
} 

이 내 문제는 윈도우가 생성됩니다 것을 : 내 초기화 할 정보 클래스에서

about = [[About alloc]init]; 

MainWindowController. 내 질문은 클래스 자체가 마스터 클래스를 모르는 경우 클래스 작성자에게 메시지를 호출/보내는 방법입니다.

+0

NSWindowControllers에는 NSWindow (self.window) 속성이 있습니다. –

답변

0

내가 제대로 이해한다면, 대부분의 클래스는 self.superclass이 그냥 슈퍼,

[super someMethod.... 

또는

[self.superclass blegh.... 

같은 또는 다른 클래스를 생성하는 클래스를 요구하고? 이 경우 다른 클래스 내부에 작성자 클래스를 선언해야하며 일부 (id) 변수는이 트릭을 수행합니다.

하지만 Mac에서 가장 많이 사용되는 디자인 패턴은 위임 패턴이며, 일단 사용을 시작하면 좋아할 것입니다. 델리게이트 선언은 대개 코코아와 UIKit이하는 일이지만 다른 프로그래밍 언어는 그렇지 않을 수도 있습니다. Obj-C에는 python f.ex와 같은 마술 변수가 없습니다. 있다. 대리인이 있거나 init/alloc 물건 바로 다음에 설정할 선언 된 변수가 있습니다.

또한 (init) 호출이 제대로 표시되지 않습니다. 보통은 다음과 같습니다

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Here you could declare your setting. 
    } 
    return self; 
} 

하지만 내 의견은 당신이 단일 패턴을 선언하는 경우 당신은 아이폰 OS/코코아에 많은 클래스와 함께처럼, 당신은 클래스의 특정 메서드를 호출하는 것입니다, 같은 :

[someclass DefaultClass] 

이전에 클래스가 선언되지 않은 경우를 제외하고 init을 수행하는 init 클래스가됩니다. 그러면 객체를 반환합니다.

관련 문제