3

クラスの最終プロジェクト用のアプリを作成しており、アプリケーションのさまざまなビューで文字列、整数、浮動小数点数を共有する必要があります。ウェイター/ウェイトレスが仕事で使用するアプリを作成する必要があります。注文するアイテムの種類 (飲み物、前菜、前菜など) ごとに異なるビューが必要であり、選択したアイテム、それぞれの価格と数量を異なるビューでアクセスできるようにして、各ビューで現在の合計を利用できるようにする必要があります (アイテムの種類ごとに 1 つのビュー)、最後に、注文されたものと合計の項目別リストを表示するビューです。

私が理解していることから、通常、ユーザーは異なるタブ付きビュー間で情報が同じであることを期待していないため、タブバーアプリケーションレイアウトを使用したくないため、セグメント化されたコントローラーを使用することを考えていました。ビュー間で共有される文字列、整数、浮動小数点数を取得するには、AppDelegate でそれらを宣言できますか? シングルトンを使用できると読んだことがありますが、クラスではそれについて説明していないため、必要以上に複雑になる可能性があると思います。AppDelegate でそれらを宣言する場合、AppDelegateViewController.m全体で使用できるようにするために でそれらを合成する必要がありますか? 異なるViewControllerごとにそれらを合成する必要があるとは想像できません。またはNSUserDefaults、この状況に最適でしょうか?

AppDelegate でインスタンス変数を宣言した場合、それは本質的にグローバル変数になりますか? これがカプセル化の慣行に反していることはわかっていますが、このアプリでは大きな違いはありません。App Store にはありません。比較的小さなアプリになることを考えると、オーバーヘッドは大きな違いにはならないはずです。 .

よろしくお願いします。ファイナルが近づいている場合は、頑張ってください!


編集


これは最初からぎこちないひどいアプリになると言わざるを得ないでしょう。iOS の MVC パラダイムなどのより高度なトピックの多くを取り上げていないので、できることはかなり限られています。私たちがやるべきことと比較して。ばかげたクラス、私は本当に自分でこれを行って、何も教えられなかったObjective-Cをよりよく理解し、iOSフレームワークをよりよく理解することができたときに、それにサインアップしたことを後悔しています。

基本的に、で変数を宣言するとAppDelegate、たとえそれが偽物であっても、異なるビューから文字列などにアクセスできますか? それともNSUserDefaults、この場合はより良い解決策でしょうか? 私は NSUserDefaults に傾倒しており、それらをプロジェクトで宣言していますViewController

4

5 に答える 5

4

典型的な Objective C MVC ソリューションは、関連するすべての共有文字列と変数を Model オブジェクトにプロパティとして配置する (このオブジェクトの新しいクラスを作成する) ことです。次に、そのモデル オブジェクトを、それらの変数または文字列にアクセスする必要があるすべてのコントローラーと共有します。

AppDelegate をモデル オブジェクトとして使用することは「過度の共有」であり、デリゲートに関連しないものでアプリ デリゲートを混乱させます。少しクリーンなソリューションは、アプリ全体で広く使用されているモデル オブジェクトへのゲッターをアプリ デリゲートに保持させることです。コードの再利用の問題を引き起こす可能性があり、そうでなければ政治的に正しくないと考えられる解決策は、モデル オブジェクトや共有変数自体を C グローバル変数に割り当てることです (retains には注意してください)。(しかし、そのようなことを気にするなら、これは通常、最速かつ最小量のコードを生成します。)

于 2011-12-12T17:06:31.437 に答える
2

hotpaw2 が言ったように、個別のモデル クラスを使用するのが最善の方法です。

ただし、これは (基本を学習している間) 小さなアプリであるため、これらのいくつかの変数をアプリ デリゲートに実装しても問題はなく、おそらく少し簡単です。

アプリが大きくなった場合、おそらくモデルをアプリ デリゲートから独自のクラスに移動する必要があります。

さらに簡単で単純な方法は、この少量のデータを nsuserdefaults に保存することです。

nsuserdefaults に保存:

[[NSUserDefaults standardUserDefaults] setObject:howManyDrinks forKey:@"howManyDrinks"];
[[NSUserDefaults standardUserDefaults] synchronize];

nsuserdefaults から取得:

NSString *howManyDrinks = [[NSUserDefaults standardUserDefaults] objectForKey:@"howManyDrinks"];
于 2011-12-12T17:16:49.367 に答える
0

Objective C の Protocols を使用して Delegation パターンの機能を利用できます。

于 2011-12-12T17:35:42.963 に答える
0

これらの値を plist に保存して、アプリ内のどこからでもアクセスして編集することもできます。シングルトンよりも実装が簡単です。また、plist は XCode で視覚的に設定できるため、初心者でも比較的簡単に作成できます。データの編集を簡単にするために、plist のラッパーも作成しました。plists のチュートリアルを次に示します。

于 2011-12-12T20:00:23.967 に答える