问题 AppDelegate文件在哪里适合MVC?


我正在学习iPhone / iPad编程。我相信我理解MVC的概念;我遇到的困难是了解普通iPhone / iPad应用程序中的某些文件如何适应MVC。

使用“基于视图的应用程序”模板创建新应用程序时,将创建AppDelegate.m和AppDelegate.h文件。

这是模型,视图或控制器文件吗?我猜它实际上都不是那些。我希望我能看到一个图表或流程图,显示应用程序中每个文件属于哪个类别。


4814
2017-11-03 16:57


起源



答案:


并非每个文件都适合特定的类别,但是,我不得不说在这个例子中AppDelegate是一个控制器,它不能直观地呈现数据(视图),也不代表实际数据(模型)但它确实确定要显示的视图控制器等,并在应用程序开始时管理其他视图(状态栏等)。

我不会太担心尝试将每个文件归类为MVC,有些只是完全不适合,如果有的话。


9
2017-11-03 17:04





应用程序委托是一个控制器对象。默认情况下,它是iOS应用程序中主窗口的所有者和控制器 - 这是一个视图。应用程序委托从表示 - 或建模 - 应用程序本身的对象接收消息(一个实例) UIApplication)。它介于应用程序对象(应用程序和系统之间的联系点)和应用程序的显示之间。


2
2017-11-03 17:47





我将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桌面应用程序中更为明显,在该委托中还有更多工作要做。


1
2017-11-03 17:11





这是一个古老的问题,但我今天才问自己同样的问题。我认为AppDelegate类不能归类为一个 调节器 只要。确实如此 控制 Window并建立其根控制器,因此可以将其归类为View Controller(注意:UIWindow继承自UIView)。但它还执行更多与模型相关的任务,例如应用程序终止时的数据持久性。因此,它也可以被视为模型控制器或与数据访问层一起使用。

它还负责处理URL打开。这可能会导致View更改,但肯定还需要与模型相关的任务,如解析,持久化,更新,身份验证等。如果视图/模型通过KVO绑定,只需更新模型就可能导致所需的视图更新。我觉得这将是一个更好的设置。此外,默认情况下,所有Core Data堆栈都添加到AppDelegate,这使得它远离仅与View相关。

它认为它负责处理应用程序的任何事情会导致它有多种用途。也许这就是为什么开发人员最终会抛出任何东西。它是根控制器,应用服务层和应用模型管理器的应用管理器。

由于AppDelegate是应用程序的入口点(对于开发人员),因此根据应用程序谈论它是有意义的。应用程序正在终止,应用程序正在进入后台等。我们正在谈论应用程序作为 模型 实体。


0
2018-03-13 18:41



如果需要,您可以在View Controller中执行数据持久性,但这并不意味着您应该这样做。在我看来,您应该将您已登记的所有任务委托给真实的模型对象。 - Tomasz Bąk


答案:


并非每个文件都适合特定的类别,但是,我不得不说在这个例子中AppDelegate是一个控制器,它不能直观地呈现数据(视图),也不代表实际数据(模型)但它确实确定要显示的视图控制器等,并在应用程序开始时管理其他视图(状态栏等)。

我不会太担心尝试将每个文件归类为MVC,有些只是完全不适合,如果有的话。


9
2017-11-03 17:04





应用程序委托是一个控制器对象。默认情况下,它是iOS应用程序中主窗口的所有者和控制器 - 这是一个视图。应用程序委托从表示 - 或建模 - 应用程序本身的对象接收消息(一个实例) UIApplication)。它介于应用程序对象(应用程序和系统之间的联系点)和应用程序的显示之间。


2
2017-11-03 17:47





我将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桌面应用程序中更为明显,在该委托中还有更多工作要做。


1
2017-11-03 17:11





这是一个古老的问题,但我今天才问自己同样的问题。我认为AppDelegate类不能归类为一个 调节器 只要。确实如此 控制 Window并建立其根控制器,因此可以将其归类为View Controller(注意:UIWindow继承自UIView)。但它还执行更多与模型相关的任务,例如应用程序终止时的数据持久性。因此,它也可以被视为模型控制器或与数据访问层一起使用。

它还负责处理URL打开。这可能会导致View更改,但肯定还需要与模型相关的任务,如解析,持久化,更新,身份验证等。如果视图/模型通过KVO绑定,只需更新模型就可能导致所需的视图更新。我觉得这将是一个更好的设置。此外,默认情况下,所有Core Data堆栈都添加到AppDelegate,这使得它远离仅与View相关。

它认为它负责处理应用程序的任何事情会导致它有多种用途。也许这就是为什么开发人员最终会抛出任何东西。它是根控制器,应用服务层和应用模型管理器的应用管理器。

由于AppDelegate是应用程序的入口点(对于开发人员),因此根据应用程序谈论它是有意义的。应用程序正在终止,应用程序正在进入后台等。我们正在谈论应用程序作为 模型 实体。


0
2018-03-13 18:41



如果需要,您可以在View Controller中执行数据持久性,但这并不意味着您应该这样做。在我看来,您应该将您已登记的所有任务委托给真实的模型对象。 - Tomasz Bąk