11

私はiPhone/iPadプログラミングを学んでいます。私はMVCのコンセプトを理解していると思います。私が難しかったのは、通常のiPhone/iPadアプリケーションのファイルのいくつかがMVCにどのように適合しているかを理解することです。AppDelegateファイルは、どこでMVCに収まるのですか?

"View-Based Application"テンプレートを使用して新しいアプリケーションを作成すると、AppDelegate.mとAppDelegate.hファイルが作成されます。

モデル、ビュー、またはコントローラファイルですか?私はそれが実際にそれらのどれだと推測しています。アプリケーションの各ファイルがどのカテゴリに分類されているかを示すダイアグラムやプロセスのフローチャートを見ることができたらと思います。

答えて

8

すべてのファイルが特定のカテゴリに適合するわけではありませんが、この例ではAppDelegateはコントローラであり、視覚的にデータ(ビュー)を表示したり、実際のデータ(モデル)、アプリケーションの開始時にどのようなビューコントローラを表示するかなどを決定し、他のビュー(ステータスバーなど)を管理します。

すべてのファイルをMVCに分類するのはあまり心配しませんが、完全に適合しないファイルもあります。

1

コードのようなもの

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 

self.window.rootViewController = self.viewController; 
[self.window makeKeyAndVisible]; 
[application setStatusBarHidden:YES withAnimation:NO]; 
return YES; 
} 

AppDelegateがモデルとビュー間のセットアップリンクに場所ですので。私はコントローラとしてAppDelegateを見ます
AppDelegateには、アプリケーション固有のコードを配置します。
ビューとモデルは、アプリケーション固有のものではないため、他のアプリケーション(UIViewクラスのような)に配置できる必要があります。
これはMacデスクトップアプリケーションではっきりしています.Delgateにはさらに多くのことがあります。

2

アプリケーションデリゲートはコントローラオブジェクトです。デフォルトでは、iOSアプリのメインウィンドウのオーナーとコントローラです(ビューです)。アプリケーションデリゲートは、アプリケーション自体を表現するオブジェクト(つまり、UIApplicationのインスタンス)を表すオブジェクトからメッセージを受け取ります。アプリケーションとシステムの接点であるアプリケーションオブジェクトとアプリケーションの表示を仲介します。

0

これは古い質問ですが、私は今でも同じ質問をしました。私はAppDelegateクラスはコントローラーとして分類できないと思います。 コントロールウィンドウを開き、そのルートコントローラを設定して、View Controller(UIWindowはUIViewから継承します)に分類できます。しかし、アプリケーションの終了時のデータの永続性など、モデル関連のタスクも多く実行します。したがって、モデルコントローラと見なすことも、データアクセスレイヤーに関連付けることもできます。

また、URLの入力を処理する責任もあります。これにより、ビューの変更が発生する可能性がありますが、解析、永続化、更新、認証などのモデル関連のタスクも必要になります。ビュー/モデルがKVOを介してバインドされている場合、モデルを更新するだけで必要なビューが更新される可能性があります。私はこれがはるかに良いセットアップになると感じています。また、デフォルトでは、すべてのコアデータスタックがAppDelegateに追加されているため、ビュー関連から離れて移動します。

それは、アプリケーションを扱うことに責任があるという事実は、複数の目的を持っていると考えています。おそらく、これが開発者がここに何かを投げ尽くす理由です。それは、ルートコントローラ、アプリサービス層、アプリモデルマネージャという意味で、アプリのマネージャーです。

AppDelegateは(開発者向けの)アプリケーションのエントリポイントであるため、AppDelegateはAppの観点から言えば理にかなっています。アプリは終了し、アプリは背景を入力しています。というエンティティとしてアプリを話しています。

+1

必要であればView Controllerでデータの永続化を行うことができますが、これは必要ではありません。私の意見では、参加したすべてのタスクを実際のモデルオブジェクトに委任する必要があります。 –

関連する問題