1

アプリケーションに MVC 設計を実装する最良の方法を見つけようとしています。現在、ユーザーが UITableViewController に入ると、インターネットにアクセスしてデータをダウンロードするようにモデルにリクエストを送信します。データが返されたら、UITableViewController の割り当てが解除されていても (ユーザーがビューを閉じたり、バックアウトしたりして) データを更新したいと考えています。そのため、現在、モデルを更新してから、モデルにデリゲートを設定して、UITableViewController で「UI を更新」します。基本的に、データが返された後、モデルで [tableView reloadData] を呼び出す必要があり、デリゲートを使用してこれを実現します。

私の質問:

  1. これは必ずしも正しい方法ですか?モデルが UIViewController でメソッドを呼び出す他の方法はありますか?

  2. そのモデルが変更されたときに複数のViewControllerに通知したい場合はどうすればよいですか...たとえば、UITableViewController1からバックアウトしてからUITableViewController2に移動し、同じモデル/データが使用されるとどうなりますか. モデルに複数のデリゲートを作成する必要がありますか?

いくつかのベストプラクティスを探して、これを正しく行っているかどうか疑問に思っています.

前もって感謝します。

4

2 に答える 2

1

NSNotificationを使用してリスナーに変更を警告するか、 Key-Value Observing(KVO)を使用できます。どちらもオブザーバーパターンのフレーバーであり、モデルからビューへの結合を取り除くのに役立ちます。ボーナスとして、任意の数のオブザーバーが、すべてを個別に伝えることなく、モデルの変更について知ることができます。

自動および手動の変更通知があります。 これが違いを説明しています

私はあなたが手動で通知することを賭けるので、あなたはそうするでしょう:

[self willChangeValueForKey:@"something"];
... // update 'something' here
[self didChangeValueForKey:@"something"];

そして、オブザーバーは通知を受け取ります。自動メソッドでは、おそらく内部では使用しない属性メソッドを使用する必要があります。通常、KVOはモデルの単一の属性に適用されますが、もちろん、モデル内に通知を送信する属性が多数ある場合もあります。「プロセスXを完了しました」という方針に沿って何かをしている場合、それはおそらくNSNotificationのようなものです。

于 2012-05-23T15:37:44.477 に答える
0

質問 2 への回答 - イベントについて通知する必要があるオブジェクトがある場合は、NSNotifications (オブザーバー パターン) を使用する必要があります。これにより、これらのオブジェクトを反応させたり、ビューを更新したり、簡単な方法で行うことができます

于 2012-05-23T15:34:40.417 に答える