我正在学习iPhone / iPad编程。我相信我理解MVC的概念;我遇到的困难是了解普通iPhone / iPad应用程序中的某些文件如何适合MVC。
使用“基于视图的应用程序”模板创建新应用程序时,会创建AppDelegate.m和AppDelegate.h文件。
这是模型,视图或控制器文件吗?我猜它实际上都不是。我希望我能看到一个图表或流程图,显示应用程序中每个文件属于哪个类别。
答案 0 :(得分:10)
并非每个文件都适合特定类别,但是,我不得不说在这个例子中AppDelegate是一个控制器,它不能直观地呈现数据(视图),也不代表实际数据(模型)但它确实确定要显示的视图控制器等,并在应用程序开始时管理其他视图(状态栏等)。
我不会太担心尝试将每个文件归类为MVC,有些只是完全不适合,如果有的话。
答案 1 :(得分:2)
应用程序委托是一个控制器对象。默认情况下,它是iOS应用程序中主窗口的所有者和控制器 - 这是一个视图。应用程序委托从表示 - 或建模 - 应用程序本身(UIApplication
的实例)的对象接收消息。它介于应用程序对象(应用程序和系统之间的联系点)和应用程序的显示之间。
答案 2 :(得分:1)
我将AppDelegate视为控制器,因为这种代码
- (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中,您可以放置特定于您的应用程序的代码 View和Model应该能够存在于其他应用程序中(如UIView类),因为它们不是特定于应用程序的 这在Mac桌面应用程序中更为明显,在该委托中还有更多工作要做。
答案 3 :(得分:0)
这是一个古老的问题,但我今天刚问了同样的问题。我认为AppDelegate类不能仅归类为 Controller 。它控制 Window并建立其根控制器,因此可以将其归类为View Controller(注意:UIWindow继承自UIView)。但它还执行更多与模型相关的任务,例如应用程序终止时的数据持久性。因此,它也可以被视为模型控制器或与数据访问层一起使用。
它还负责处理URL打开。这可能会导致View更改,但肯定还需要与模型相关的任务,如解析,持久化,更新,身份验证等。如果视图/模型通过KVO绑定,只需更新模型就可能导致所需的视图更新。我觉得这将是一个更好的设置。此外,默认情况下,所有Core Data堆栈都添加到AppDelegate,这使得它远离仅与View相关。
它认为它负责处理应用程序的任何事情会导致它有多种用途。也许这就是为什么开发人员最终在这里抛出任何东西。它是根控制器,应用服务层和应用模型管理器的应用管理器。
由于AppDelegate是应用程序的入口点(对于开发人员而言),因此根据应用程序谈论它是有意义的。应用程序正在终止,应用程序正在进入后台等。我们将该应用程序称为模型实体。