Primero, un poco de fondo. Soy nuevo en el desarrollo de iOS, llevo mucho tiempo en .Net land, y es por eso que incluso estoy haciendo esta pregunta, pero aquí va.Pasar datos de un controlador de vista a otro; iOS <= 4 vs iOS 5
La configuración básica es esta. Tiene un UINavigationController
con un RootViewController
llamaremos al MasterViewController
. Cuando ocurre alguna acción en este MasterViewController, queremos profundizar en un DetailsViewController
. Sin embargo, también queremos pasar algunos datos al DetailsViewController
.
es mi entendimiento, que en las versiones anteriores del SDK (antes de IOS 5) el enfoque era similar a esto:
@implementation MasterViewController
-(IBAction)someAction
{
DetailsViewController *dvc = [[DetailsViewController alloc]initWithNibName:@"DetailsView" bundle:nil];
dvc.someDataProp = [self getSomeDataSomeHow];
[[self navigationController] pushViewController:dvc animated:YES];
}
@end
Ahora, sin embargo, en IOS 5, parece que esto se hace ahora usando Storyboard y segues. En XCode se configura la segue de la MasterViewController a la DetailsViewController, y luego en el código que hace algo como esto:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController setSomeDataProp:[self getSomeDataSomeHow]];
}
Mi pregunta es básicamente el siguiente: El enfoque antiguo de alguna manera se siente mucho más limpio para mí. Estás siendo muy explícito sobre el tipo de ViewController
que estás presionando en la pila de navegación y puedes establecer propiedades fácilmente en él. Sin embargo, en el nuevo enfoque, destinationViewController
es del tipo id
(por razones obvias), y me parece mucho menos limpio. De nuevo, este podría ser mi lado .Net que sale, pero ¿es esto común en iOS? ¿Solo usas id y lanzas precaución al viento?
Mucho respeto por preguntar cómo se hace esto en lugar de simplemente copiar y pegar fragmentos. También tuve preguntas similares y con algo de experiencia aquí está mi respuesta: con iOS5, veo que la lógica de la interfaz de usuario se ha dividido en dos: 1) Ciclo de vida y transiciones de ViewController 2) Flujo de datos.Storyboard se ocupa de 1 y se espera que los desarrolladores se encarguen de 2. En tal escenario, estos lanzamientos ocurrirán. Para mí, la pregunta es, ¿esta división tiene sentido? ¿Pueden estos dos conceptos estar desacoplados? Supongo que Apple va por ese camino y veremos cómo funciona. – Guven