6

https://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

上記のリンクでは、モデル レイヤーが ViewController と通信する方法について次のように説明しています。

「モデル オブジェクトが変更されると (たとえば、ネットワーク接続を介して新しいデータが受信されると)、コントローラー オブジェクトに通知され、適切なビュー オブジェクトが更新されます。」

私の質問は、モデル オブジェクトがコントローラー オブジェクトにどのように通知するかということです。これを行うには、どのような方法がありますか? 私のモデル レイヤーは、ユーザーの位置情報を取得してから、Web サービスを呼び出します。そのデータがダウンロードされたときにコントローラー オブジェクトに通知するにはどうすればよいですか?

ありがとう

4

1 に答える 1

5

特定のケースに応じて、これを行うにはいくつかの方法があります。通常、プロトコル/デリゲートの実装、キー値の監視、または通知を使用します。ここにかなり良い概要があります。

編集:

この回答へのコメントが述べたように、追加する必要があると思いました:コールバックブロックの使用も、ニーズに応じて非常に堅実なオプションです。どのような場合にどのソリューションが最適かについては、さまざまな決定要因が考えられますが、ここでは私が従う一般的な概要を示します。

一度に 1 つのオブザーバーしか必要としないことが保証されている場合: 私は通常、ブロックまたはデリゲートを使用します。私の個人的な好みは、コールバックが 1 つまたは 2 つしかない場合はブロックを使用することです。これは、ここが優れているためです。

複数のオブザーバーが必要な場合は、 経由で通知を使用しNSNotificationCenterます。

イベントではなく、インスタンスの特定のプロパティのみを監視する必要がある場合は、Key-Value-Observing を使用します。

于 2012-07-21T20:33:49.230 に答える