with present open new instantiate from create change objective-c ios uiviewcontroller pushviewcontroller

objective-c - present - swift 4 show new view controller



¿Qué es exactamente lo que willMoveToParentViewController: y didMoveToParentViewController: do? (2)

Sé que a partir de iOS5 y los nuevos métodos de contención de UIViewController, se supone que debe llamar a estos métodos junto con addChildViewController:, removeFromParentViewController: y el método de transición. También sé el orden correcto de llamarlos en los tres escenarios. Lo que no sé es qué hacen exactamente estos métodos?

Si estos fueran simplemente puntos de anulación para las subclases de UIViewController, supongo que no tendríamos que llamar super cuando se anula. ¿Qué puede o va a salir mal si no llamo willMoveToParentViewController: nil antes de eliminar un controlador de vista o didMoveToParentViewController: self ?


Además de lo que se ha dicho, sí llaman a algunos métodos de delegado:

Llamadas a addChildViewController [child willMoveToParentViewController:self]

y removeFromParentViewController: calls [child didMoveToParentViewController:nil]

Además, modifican la propiedad childViewControllers , que contiene una matriz de controladores de vista secundarios.


Hay muchas respuestas a esto:

  1. Están allí y se supone que debes llamarlos cuando corresponda para mantener siempre el patrón. De esa manera, si cambia las superclases de UIViewController a su propio controlador de vista, no tendrá que preocuparse por dónde siguió el patrón completo.

  2. Son mejores lugares para conectar que decirle a todos que anulen addChildViewController: Como usted dice, la mala gestión de willMoveToParentViewController: suena como si fuera menos peligroso que la administración incorrecta de addChildViewController: especialmente si olvida llamar super .

  3. UIViewController probablemente depende de que usted mantenga el patrón. Tal vez considerará que el estado es inconsistente si sabe que ha recibido addChildViewController: pero nunca recibe los otros dos mensajes. Ya sea que esto suceda debido a que UIViewController realiza la contabilidad para atraerlo a mantener el patrón completo o si realmente desordena su estado interno es un juego divertido de adivinanzas, pero también es algo que puede cambiar en cualquier versión de iOS. Las cosas pueden romperse mal. Por eso el patrón está ahí, para que Apple te diga que mientras hagas esto, seguiremos funcionando sin importar lo que pase.

Cuestionar un patrón es bueno, pero hay muchos negativos potenciales que vienen con tratar de cortar la conformidad de un patrón al hueso. A menos que el patrón esté ridículamente involucrado, generalmente es más fácil ajustarse a él.