11

Estoy aprendiendo la programación de iPhone/iPad. Creo que entiendo el concepto de MVC; Lo que me cuesta trabajo es entender cómo algunos de los archivos en una aplicación normal de iPhone/iPad se ajustan a MVC.¿Dónde encaja el archivo AppDelegate en MVC?

Cuando crea una nueva aplicación utilizando la plantilla "Aplicación basada en la vista", se crea un archivo AppDelegate.m y AppDelegate.h.

¿Es ese un modelo, vista o archivo de controlador? Supongo que en realidad no es ninguno de esos. Me gustaría poder ver un diagrama o diagrama de flujo del proceso que muestre en qué categoría se encuentra cada archivo de la aplicación.

Respuesta

8

No todos los archivos se ajustarán a una categoría particular, sin embargo, tendría que decir en este caso que AppDelegate es un controlador, no presenta datos visualmente (una vista) ni representa los datos reales (un modelo), pero sí determina qué controladores de visualización mostrar, etc. y gestiona otras vistas (barra de estado, etc.) al inicio de la aplicación.

No me preocuparía demasiado por tratar de clasificar cada archivo en MVC, algunos simplemente no cabrán perfectamente, en todo caso.

1

veo el AppDelegate como un controlador porque ese tipo de código

- (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 es un lugar para enlaces de configuración entre los modelos y puntos de vista.
En AppDelegate, coloque un código que sea específico para su aplicación.
La vista y el modelo deberían poder vivir en otra aplicación (como una clase UIView), ya que no son específicos de la aplicación.
Esto es más obvio en una aplicación Mac Desktop, hay más para hacer en ese Delegate.

2

El delegado de la aplicación es un objeto controlador. De forma predeterminada, es el propietario y el controlador de la ventana principal, que es una vista, en una aplicación de iOS. El delegado de la aplicación recibe mensajes de un objeto que representa (o modela) la propia aplicación (una instancia de UIApplication). Media entre el objeto de la aplicación, que es el punto de contacto entre la aplicación y el sistema, y ​​la pantalla de la aplicación.

0

Esta es una vieja pregunta, pero hoy me hice la misma pregunta. Creo que la clase AppDelegate no se puede clasificar solo como un controlador . Hace control la Ventana y establece su controlador raíz para que pueda clasificarse como Controlador de Vista (nota: UIWindow hereda de UIView). Pero también realiza más tareas relacionadas con el Modelo, como la persistencia de los datos cuando la aplicación finaliza. Por lo tanto, puede considerarse un Controlador de Modelo o involucrarse con la Capa de Acceso a Datos también.

También es responsable de manejar la apertura de URL. Esto puede provocar un cambio en la Vista, pero también requerirá tareas relacionadas con el Modelo, como el análisis, la persistencia, la actualización, la autenticación, etc. Si la Vista/Modelo está enlazada a través de KVO, simplemente actualizar el modelo podría hacer que las Vistas necesarias se actualicen. Siento que esta sería una configuración mucho mejor. Además, el hecho de que, de manera predeterminada, toda la pila de datos básicos se agregue a AppDelegate lo aleja de la simple relación de visualización.

Cree que el hecho de que sea responsable de todo lo relacionado con la aplicación hace que tenga múltiples propósitos. Quizás es por esto que los desarrolladores terminan lanzando cualquier cosa aquí. Es el administrador de la aplicación tanto en el sentido del controlador raíz, la capa de servicio de la aplicación y el administrador del modelo de la aplicación.

Dado que AppDelegate es el punto de entrada a la aplicación (para el desarrollador), tiene sentido hablar de ello en términos de la aplicación. La aplicación está finalizando, la aplicación está ingresando el fondo, etc. Estamos hablando de la aplicación como una entidad modelo.

+1

Puede realizar la persistencia de los datos en View Controller si lo desea, aunque esto no significa que deba hacerlo. En mi opinión, debe delegar todas las tareas que ha enlistado a los objetos del modelo real. –