3

3 つのセクションに分割されたウィンドウで構成される Cocoa アプリを作成中です。各セクションは独自のビジネスを担当し、テーブル ビュー、ポップアップ ボタンなどの間に約 30 のコントロールがあります。
最初は 1 つのコントローラーで開始しましたが、簡単に面倒になるので、ロジックを 3 つのコントローラー オブジェクトに分割することにしました。 (ビューの各セクションに 1 つ)。次に、Interface Builder で NSObject 参照を作成し、すべてのアウトレット、アクション、データ ソース、およびデリゲートを接続しました。ここまでは順調ですね。

ここで、3 つのセクションがオブジェクトを相互に渡します。そのため、あるクラスから別のクラスにオブジェクトを設定する方法が必要です。問題のオブジェクトはクラス変数ですが、オブジェクトへの参照がないため、渡す方法がわかりません。

これを行う方法はありますか、それとも全体的に間違ったアプローチですか?

解決:

以下のコメントの 1 つで Sergio が述べたように、解決策は、各コントローラー内の他のコントローラーへの弱い参照を IBOutlet として作成し、Xcode Interface Builder でコントローラー オブジェクトをリンクすることのようです。その結果、各コントローラーは、参照されたコントローラーの公開されたメソッドと変数にアクセスできるようになりました。

4

1 に答える 1

2

ここで、3 つのセクションが互いにオブジェクトを渡します。そのため、あるクラスから別のクラスにオブジェクトを設定する方法が必要です。問題のオブジェクトはクラス変数ですが、オブジェクトへの参照がないため、渡す方法がわかりません。

あなたのデザインに欠けているように見えるのはモデルです(Model-View-Controller のように)。これは、影響を受ける各オブジェクトがアクセスできるように、一時的な状態であっても、アプリのすべての状態をカプセル化するクラスになります。

このようなモデル クラスの簡単な実装の 1 つはシングルトンであり、すべてのコントローラーですぐに利用できます。Objective-C でのシングルトンの実装については、こちらをご覧ください。

モデルクラスを取得したら、コントローラーは次のようにアクセスできます。

[MyModel sharedModel].myObject = ...;

デザインのモデルを作成する方向に進むことが理にかなっている場合、このアプローチは良いです、IMO。これは、コントローラーが共有するオブジェクトのセマンティクスによって異なります。したがって、あなたのケースにより適した代替ソリューションがあるかもしれません。たとえば、1 つのコントローラーが共有オブジェクトの所有者であり、他の 2 つは init で最初のコントローラーへの参照を受け取り、そのパブリック プロパティにアクセスできるようにすることができます。

于 2013-01-08T19:00:30.547 に答える