2

私は、液体で満たされたシェルの高調波やその他の特性をモデル化するための社内プログラムの開発者です。現在、プログラム全体は、計算で一度に使用される物理的特性 (温度、圧力など) のセットが 1 つだけであると想定しています。すべての計算を Sphere モデルに分解しました。球を所有するコントローラーがあります。ユーザーが物理プロパティを変更すると、コントローラーは球にすべてを再計算させ、球の計算結果を表示しているすべてのウィンドウを更新します。

今、ある人から、温度と圧力の範囲で特定の高調波の周波数を表示する表を作成するように依頼されました。これには、他のすべてのウィンドウから独立している必要があるため、独自の球体モデルを持つ新しいコントローラーが必要になると思います。

ここに私の質問があります: 私の新しいコントローラーは NSWindowController サブクラスであるべきですか、それともテキストフィールドがコントローラーの値にバインドされている NSWindow であるプロパティ (またはまったく異なるもの) を持つ NSObject サブクラスであるべきですか? 私は会社で唯一の開発者であり、過去 4 年間このプログラムを書いていたので独学で Cocoa を学んだので、常にベスト プラクティスに従ってきたかどうかはわかりません。新しい重要な機能を導入しようとしているので、正しく機能していることを確認したいと思います。

これが問題かどうかはわかりませんが、組織内に G5 マシンがまだいくつかあるため、ソリューションは OS X 10.5 で実行する必要があります。

4

1 に答える 1

2

特定のウィンドウを制御するコントローラーがある場合は、より複雑なニブの読み込みとメモリ管理の問題を処理するNSWindowControllerという理由だけで、間違いなくサブクラスを使用する必要があります。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];
    }
}
于 2012-01-03T22:48:09.827 に答える