1

質問が少し一般的であることは知っていますが、私の問題も一般的だと思います。私は自由な時間に小さなアプリケーションを開発していて、Cocoaでそれを行うことにしました。それは素晴らしいことです。多くのことがほぼ自動的に機能しますが、フレームワークがどのように機能するかを理解するのが非常に難しい場合があります。

最近、私は新しい問題に直面しています。アプリケーションのすべてのウィンドウを単一のクラス、基本的にはフロントコントローラーから管理したいと思います。メインメニューと「データのインポート」機能があります。それをクリックすると、テーブルを含む別のウィンドウが表示され、データを更新するためのメソッドが呼び出されます。問題は、このメソッドがNSTableViewDataSourceプロトコルを実装するクラス内にあることです。

そのクラスへの参照をどのように取得できますか?そしてもっと重要なのは、それを行う正しい方法はどれでしょうか?NSWindowテーブルを含むウィンドウを制御できる(そしてメソッドを呼び出す)NSWindowのインスタンスを受け取ることができるように、クラスを拡張する必要がありますか?

この問題を解決する方法はいくつか見つかるかもしれませんが、ココアで使用するベストプラクティスはどれかを知りたいです。

PS:ドキュメントファイルがたくさんあることは知っていますが、やりたいことをすべて行うには2つのライフが必要なので、ここで質問するのに役立つかもしれないと思いました:)

4

1 に答える 1

2

問題は、このメソッドがNSTableViewDataSourceプロトコルを実装するクラス内にあることです。

そのクラスへの参照をどのように取得できますか?

これらの2つの文は意味がありませんが、私はあなたが何をしているのか理解していると思います。

NSWindowをサブクラス化する代わりに、インポートウィンドウの制御ロジック(NSTableViewDataSourceメソッドを含む)をコントローラークラスに配置します。コントローラがウィンドウに対応している場合は、NSWindowControllerをサブクラス化できますが、そうする必要はありません。

-importData:アプリケーションデリゲートにIBActionとして実装してから、メニュー項目のセレクターをFirst ResponderのimportData:に接続できます。このメソッドは、インポートウィンドウコントローラーをインスタンス化し、ペン先からウィンドウをロードする必要があります。

インポートウィンドウのコントローラー-awakeFromNibまたは-windowDidLoadメソッドで、データを更新するメソッドを呼び出します。

追加した:

アプリデリゲートで使用することをお勧めするパターンは次のとおりです。

@property (retain) ImportWindowController *importWC;

- (IBAction) showImportWindow:(id) sender {
    if (!self.importWC)
        self.importWC =
        [[ImportWindowController alloc] initWithWindowNibName:@"ImportWindow"];
    [self.importWC refreshData];
    [self.importWC.window makeKeyAndOrderFront:sender];
}
于 2012-12-02T06:08:16.440 に答える