0

さまざまな Objective-C プログラミング ガイドで強調されている MVC パターンに従って、コントローラーでモデルを使用する場合、コントローラーをdelegate特定のモデルの として設定する必要があります。現在、作成に非常にコストのかかる巨大な Data オブジェクトがあり、この Data オブジェクトを操作する必要があるコントローラーがいくつかあります。プロパティが適切なコントローラーに設定されている限りdelegate、Data オブジェクトはそのコントローラーに対して正常に機能します。これらのコントローラー間でこのモデルを共有する方法はありますか?

私はしばらくブレインストーミングを行ってきましたが、特に良い解決策は思いつきませんでした。私が思いついたいくつかのこと

  1. 通知センターを使用します(ただし、この特定のケースのためだけにそのような関係を設定するには費用がかかるようです)
  2. Data オブジェクトの各メソッドが引数を取るようにしdelegateます。これは私が現在使用しているものですが、扱いにくく、限界に達しています。

編集

NSArray の使用を提案してくれた人々に感謝します。この微妙な点を含めるのを忘れていると思います:

私の場合、デリゲートのA1 つである が、特定のメソッドの 1 つを使用して Data オブジェクトを照会したいとします。delegateData オブジェクトのフィールドが に設定されている場合、結果は正しいものになりますA。しかし、私が理解していることから、配列を使用してすべてのデリゲートでメソッドを呼び出しても、私が望む答えは得られません。

実際、私の Data オブジェクトは、どのデリゲートがそれを呼び出しているかを認識できなかったため、関連付ける必要があるすべてのデリゲートを認識していても、正しい結果を返すことはできません。

これについて何か考えはありますか?

4

3 に答える 3

0

通知を使用したくない場合は、マルチキャスト デリゲート アプローチを使用してみてください。これNSMutableArrayでは、単一のデリゲートではなく、複数のデリゲートを保持します。したがって、デリゲートを設定する代わりに、デリゲート配列からデリゲートを追加および削除します。デリゲートを呼び出すときは、配列内の各デリゲートでそのデリゲート メソッドを呼び出し、その特定のコールバックに応答するかどうかをそれぞれチェックします。デリゲート配列を自分で作成および管理するため、必要に応じてデリゲートが呼び出される順序を制御することもできます。

于 2013-06-27T18:41:16.887 に答える