5

Hace aproximadamente un mes mi esposa y yo tuvimos una buena idea para una aplicación de iPhone, así que pensé en cómo funcionaría la aplicación de un usuario perspectiva y hace aproximadamente una semana abrí XCode por primera vez y comencé a desarrollarme.Preguntas sobre la estructura de la aplicación de iPhone: datos centrales, vistas, vistas modales, etc.

Antes de quedar demasiado atrapado en la escritura de la aplicación, quiero asegurarme de que tengo algunos conceptos clave claros en mi mente, específicamente relacionados con la arquitectura.

FYI, como principio me gustaría intentar crear la mayor parte de mi aplicación mediante programación (específicamente la interfaz de usuario) para que tenga un conocimiento profundo de lo que está sucediendo. Más adelante, podría usar IB como una herramienta para acelerar el desarrollo de UI (se aplica en este momento porque estoy usando TableViews en lugar de vistas estáticas).

Ver Controladores

  • Así UINavigationControllers generalmente no son sub-clasificado y se crean como una propiedad en el AppDelegate y son la principal 'sub-view' de la MainWindow.xib.

  • El UINavigationController controla una pila de vistas y generalmente se inicia con un controlador de vista raíz.

  • El controlador de navegación generalmente se referencia y envía mensajes desde dentro del controlador de vista actual/superior como [autocontrolador de navegación] que es una propiedad de solo lectura de la clase primaria UIViewController.

Core Data

  • El contexto de objeto gestionado es el principal punto de control para acceder a datos en el modelo, pero en general no se utiliza directamente y en lugar de buscar a peticiones se utilizan para devolver órdenes, los conjuntos o diccionarios de objetos de datos que luego son usados ​​por los controladores de vista para presentar y manipular datos.

  • el contexto se crea como una propiedad en el delegado de la aplicación y luego se pasa al controlador de vista raíz al inicio, que lo pasa a las vistas posteriores en la pila antes de decirle al controlador de navegación que cambie la vista (por ejemplo cuando se toca una celda).

Así que me ha llevado a la semana para llegar a aquí, puedo crear mi modelo, llenarlo con los datos y mostrarlo en una vista de tabla, pero no han sido capaces de encontrar tanto en modales Vistas cuando desee para editar datos, específicamente cómo diseñar vistas modales (si hay alguna diferencia específica para las vistas normales)?

Además, no estoy del todo seguro de toda la "vinculación" de datos para ver los objetos de qué se trata y cómo hacerlo mediante programación.

Muchas gracias por sus comentarios, sugerencias por adelantado.

Respuesta

2

Una vista se convierte en modal cuando se muestra con presentModalViewController: animated. Puede pasar el modelo que se va a editar antes de presentar la vista modal.

DetailViewController dvc = ...; 
dvc.model = model; 
dvc.delegate = self; // if you want to use a delegate pattern. 
[self presentModalViewController:dvc animated:YES]; 

Dado que el modelo que desea editar está disponible en el controlador de vista modal puede establecer los valores en viewDidLoad. No hay ningún enlace de datos disponible en la plataforma iOS, lo que significa que debe actualizar la vista y su modelo manualmente.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.someTextField.text = self.model.someText; 
} 

Lo que debe tener en cuenta cuando trabaja con una vista modal es que debe proporcionar una forma de descartarla. P.ej. al tener una barra de navegación en la parte superior con los botones Cancelar y Guardar. Descartando un controlador de vista modal se realiza usando:

[self dismissModalViewControllerAnimated:YES]; 

Es posible descartar la vista modal desde dentro del controlador de vista modal pero que también significa que un controlador tal modal debe ser capaz de guardar el modelo en cuestión. Personalmente utilizaría una devolución de llamada al controlador de presentación para informarle si desea guardar o cancelar, así como para manejar el descarte de la vista modal. Esto se puede hacer usando un patrón de delegado. Entonces, cuando el usuario toque Guardar, puede actualizar el modelo y luego notificar al delegado.

- (IBAction)save:(id)sender { 
    self.model.someText = self.someTextField.text; 
    [self.delegate detailViewControllerDidSave:self]; 
} 

Y en el presentador tienen un método como:

-(void)detailViewControllerDidSave:(DetailViewController *)controller { 
    // save the model 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

Hola Robert, gracias. Entonces, ¿hay algo especial sobre detailViewController para que cuando se muestre modalmente los campos se vuelvan editables? – Glynton

+0

De nada. No creo que haya una forma automática de hacerlo. Un UIViewController tiene una propiedad de edición que se puede usar para alternar un estado editable a través de setEditing: animated :. Si desea utilizar el mismo DetailViewController para visualizar y editar, puede llamar a [dvc setEditing: YES animated: NO] después de la llamada a presentModalViewController: animated :. Luego debe implementar setEditing: animated: en DetailViewController y actualizar los controles apropiados, como self.someTextField.enabled = edit. –

+0

"No hay enlace de datos disponible en iOS" - Ya no es cierto: https://www.youtube.com/watch?v=88DkI8ZfEkg - se lanzará antes de fin de año (algunas licencias del sistema operativo) – Michael

0

Algunas respuestas, según mi conocimiento de vistas/datos. Todavía no tengo experiencia con CoreData, así que no responderé esa parte.

  • Una vista modal es solo una vista normal. Pero su tamaño puede ser un poco diferente, ya que cubre algunos elementos de UI que no estarían cubiertos por una vista insertada en un controlador de navegación.

  • Para la "vinculación" de datos a las vistas, ya lo ha hecho si completa una vista de tabla. Existe una serie de métodos de "fuente de datos" para implementar en su Controlador en el que proporciona sus datos de su Modelo a su Vista (patrón MVC).

+0

... así fijaciones son más de un instrumento IB donde se tiene una matriz de datos con las entidades establecidas para ver objetos? El equivalente programático está anulando el - (UITableViewCell *) tableView: (UITableView *) tableView – Glynton

Cuestiones relacionadas