1

まだcs193pの割り当て4にあります。-http ://www.stanford.edu/class/cs193p/cgi-bin/drupal/system/files/assignments/Assignment%204_2.pdf

場所のリストから写真を表示することを完全に(ish)実装しました。

アプリケーションの2番目のタブ(必須のタスク10と11)を追加します。これは、時系列で表示された最新の20枚の写真のリストを生成して表示するためのものです。

私の質問は、MVCパターンとNSUserdefaultsの設定/アクセスに関するものです。

基本的に、写真を表示するたびに、NSUserdefaultsに保存されているプロパティリストを更新する必要があります。

「最近の写真」タブを選択するときは、ユーザーが最近表示した写真を選択して選択できるように、これらの値を読み取って表示する必要があります。

これは、コードの行を書くことで非常に簡単に実装できると思います。おそらく、機能するという観点からです。

私はこの質問を見ました:CS193P UITabBarController MVCヘルプの割り当て4は一種の関連性がありますが、パターンの性質に関する私のより理論的な質問には実際には対応していません。

私の質問は、MVCパターンについてです。

講義で、彼がお気に入りのグラフでこれを示したとき、前の計算機の割り当てから、彼はデリゲートを使用して、お気に入りのリストビューコントローラーとgraphviewControllerの間で通信しました(講義9のスライド64の図を参照)。 http://www.stanford.edu/class/cs193p/cgi-bin/drupal/system/files/lectures/Lecture%209_1.pdf

MVCパターンを壊さないようにするために同様のことを行う必要がある場合、またはimageViewControllerのviewWillLoadでNSUserdefaultsを使用して写真をお気に入りに追加し、RecentImagesViewControllerのセッターで使用できるかどうかを調べようとしています。 。NSUserdefaultsは永続性のために設計されていることを知っていますが、グローバル変数を使用しているように感じます。

この質問は、cs193pコースに精通していないと、理解しにくい言葉で表現されていることに気づきました。申し訳ありません。

アドバイスありがとうございます!!

4

3 に答える 3

2

単純なものを複雑なものに変換する必要はないと思います。を使用してお気に入りを保存しているNSUserDefaultsので、それだけです。使用している場所は最適ではないかもしれませんが(viewWillLoad悪い場所だと言っているわけではありません。コードがわかりません)、を更新するだけの代理人は必要ないと思いますNSUserDefaultsボトムライン、 KISSの原則を忘れないでください。:)

于 2012-05-13T21:16:15.933 に答える
0

質問を正しく理解していれば、適切なViewControllerから設定/読み込みが行われているようです。異なるタブのビューコントローラのそれぞれから呼び出すことができるデリゲート(シングルトンである場合とそうでない場合があります)を作成すると、コードの重複を防ぐのに役立ちます。

于 2012-05-13T21:27:22.137 に答える
0

ユーザーのデフォルト自体はグローバルな概念であるため、おそらくグローバル変数を使用しているように感じます。そして、彼らはそうあるべきです。同期されていないバージョンのユーザー設定でアプリのさまざまな部分が動作することは望ましくありません。

しかし、古いC / C ++グローバル静的データの意味で 変数という用語を使用する場合、いいえ...それはそれが何であるかではありません。Appleは、ユーザーのデフォルトデータをカプセル化NSUserDefaultsするすてきな整頓されたクラスになるように作成しました。シングルトンインスタンスのようなものにアクセスするために使用するという事実[NSUserDefaults standardUserDefaults](それがAppleがそれを実装することを選択した方法かどうかはわかりません)は、それが真のグローバル変数であることを意味しません。

Jacky Boyは、シンプルに保つことが最善であることに同意しますが、あなたの質問は、それを自分のやり方で行うことがMVCパターンの違反であるかどうかを本当に尋ねています(そして、パターンに惜しみなく固執することが必ずしもコードを最良にするわけではありません) 。それはあなたがモデルをどう考えるかによります。NSUserDefaultsAppleは、プリファレンスデータのモデルレイヤーカプセル化として構築されたと言っても過言ではありません。これで、モデルレイヤーができ、コントローラーがそれを使用できるようになります。

または、モデルレイヤー全体を自分で作成する必要があると思いますか。その場合、モデルレイヤーにはのラッパーがありますNSUserDefaults。それはほとんどの状況でやり過ぎのように思えます。

これはおそらくそれを正当化する可能性のある1つの状況です。論理的に関連しているように見えるプリファレンスデータがたくさんあるが、その一部はに適していない場合NSUserDefaults。おそらく、それはオブジェクトの階層に格納された大量のバイナリデータであり、CoreDataで永続化する必要があります。しかし、それでも論理的にはあなたが保持しているものに関連しているようですNSUserDefaults。次に、コアデータとNSUserDefaultsデータの両方をカプセル化する独自のモデルレイヤーを作成することにします。ビューコントローラはそれを直接使用できます。

standardUserDefaultsしかし、一般的に、iOSは、オブジェクトを直接使用する必要がある人がいるように設計されていると思います。

于 2012-05-14T08:55:59.807 に答える