Estoy trabajando con un código que necesito para refactorizar. Un controlador de vista actúa como un contenedor para otros dos controladores de vista, y se intercambiará entre ellos, como se muestra en el siguiente código.Entender el uso de addChildViewController
Este puede no ser el mejor diseño. Puede que no sea necesario intercambiar los controladores de vista de esta forma. Entiendo que. Sin embargo, a medida que trabajo con este código, quiero comprender mejor lo que sucede con la llamada addChildViewController. No he podido encontrar la respuesta en los documentos de Apple o en preguntas relacionadas, aquí (probablemente una indicación de que el diseño debe cambiar).
Específicamente: ¿cómo maneja el controlador de vista de contenedor una situación en la que se le pide que agregue un controlador de vista secundaria, que ya ha agregado? ¿Reconoce que ya ha agregado ese objeto controlador de vista?
E.g. si el código de abajo está dentro de un método - y que el método se llama dos veces ...
[self addChildViewController:viewControllerB];
[self.view addSubview:viewControllerB.view];
[viewControllerB didMoveToParentViewController:self];
[viewControllerA willMoveToParentViewController:nil];
[viewControllerA.view removeFromSuperview];
[viewControllerA removeFromParentViewController];
Gracias, Gavin
Hola Jesper, gracias. Heredé este código así que es algo que volveré a trabajar. El intercambio de controladores de vista secundarios es completamente un detalle de implementación, dentro del controlador de vista "contenedor". No hay nada en la interfaz pública de esa clase que permita a los clientes cambiar las vistas. Es un diseño interno para mostrar uno de dos, ver controladores ...Al pasar, he notado que la adición ocurre dos veces (por ejemplo, una repetición desde la aplicación WillEnterForeground). No he notado ningún efecto negativo de eso ... Sé que necesito cambiarlo, pero también tengo curiosidad por saber qué está pasando;) –
Ah, eso tiene sentido. Intente controlar el manejo de la menor cantidad de métodos posible. Otra cosa para facilitar la depuración (y que podría resolver el problema si tiene que lidiar con un entorno que funciona mal) es hacer que estos métodos sean "idempotentes", lo que significa que llamarlos uno o 42 veces son funcionalmente equivalentes y harán lo mismo. El código que se comporta bien debería caer más o menos en esto sin ninguna resistencia. Las notificaciones en particular ('applicationWillEnterForeground' y similares) tienden a ser retiradas de la fila/cola de UI, así que ten cuidado con eso. – Jesper