2

저는 액체 충전 쉘의 고조파 및 기타 특성을 모델링하기위한 사내 프로그램 개발자입니다. 현재 전체 프로그램은 계산에서 한 번에 사용되는 물리적 속성 (온도, 압력 등)이 하나만 있다고 가정합니다. 나는 이미 모든 계산을 구형 모델로 분해했다. 저는 구를 소유 한 컨트롤러를 가지고 있습니다. 사용자가 물리적 속성을 변경하면 컨트롤러가 구체를 가지고 모든 것을 다시 계산하고 구 계산 결과를 표시하는 모든 창을 업데이트합니다.새 컨트롤러의 수퍼 클래스는 무엇이되어야합니까?

누군가 이제 온도와 압력의 범위에서 특정 고조파의 빈도를 표시하는 테이블을 만들도록했습니다. 나는 이것이 다른 모든 윈도우와 독립적 일 필요가 있기 때문에 구형 모델을 가진 새로운 컨트롤러가 필요하다고 생각한다.

여기 내 질문 : 내 새 컨트롤러 NSWindowController 하위 클래스 또는 NSWindow 컨트롤러 (또는 완전히 다른 뭔가)의 값에 바인딩 된 NSWindow 속성 NSObject 하위 클래스해야합니까? 나는이 회사의 유일한 개발자이며, 지난 4 년 동안이 프로그램을 작성하면서 코코아를 혼자서 배웠으므로 항상 베스트 프랙티스를 따랐는지 확신 할 수 없습니다. 필자는 새로운 중요한 기능을 소개하려고하기 때문에 제대로하고 있는지 확인하고 싶습니다.

이 문제는 확실치 않지만 해결책은 OS X 10.5에서 실행해야합니다. 아직 조직에 G5 머신이 일부 있기 때문입니다.

답변

2

특정 창을 제어하는 ​​컨트롤러가있는 경우 NSWindowController이 더 복잡한 nib로드 및 메모리 관리 문제를 처리하기 때문에 단지 NSWindowController 하위 클래스를 사용해야합니다.

새 창에서 Sphere 모델이 주 컨트롤러와 다른 데이터 세트를 표시하지 않는 한 새 컨트롤러에 새 모델을 만들 필요가 없습니다. 메인 컨트롤러에서 구체 인스턴스를 참조 할 수 있습니다. 이 같은

뭔가 :

.H :

#import <Cocoa/Cocoa.h> 

@class Sphere; 

@interface FrequenciesController : NSWindowController 
{ 
    Sphere* sphere; 
} 
- (id)initWithSphere:(Sphere*)aSphere; 
@end 

하는 .m :

#import "FrequenciesController.h" 
#import "Sphere.h" 

@implementation FrequenciesController 
- (id)initWithSphere:(Sphere*)aSphere 
{ 
    self = [super initWithWindowNibName:@"NameOfYourNib"]; 
    if (self) 
    { 
     sphere = [aSphere retain]; 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [sphere release]; 
    [super dealloc]; 
} 
@end 

창을 만들려면, 당신은 다음 당신의 메인 컨트롤러에이 같은 뭔가를해야 , 당신이 frequenciesController를 ivar로 선언했다고 가정하면 :

- (IBAction)showFrequenciesWindow:(id)sender 
{ 
    if(!frequenciesController) 
    { 
     frequenciesController = [[FrequenciesController alloc] initWithSphere:self.sphere]; 
     [frequenciesController showWindow:self]; 
    } 
} 
+0

새 창의 구가 다른 모든 창과 다른 데이터 세트를 표시하므로 자체 구형 모델이 필요합니다. NSWindowController 서브 클래스 사용에 대한 정보를 고맙게 생각합니다. – SSteve

+0

일반적으로 윈도우를 관리하는 경우에는 'NSWindowController'를 사용해야합니다. 창 컨트롤러를 해당 창에 표시된 모델의 모델 컨트롤러로 사용하는 것이 좋습니다. –

관련 문제