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:
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.Son mejores lugares para conectar que decirle a todos que anulen
addChildViewController:
Como usted dice, la mala gestión dewillMoveToParentViewController:
suena como si fuera menos peligroso que la administración incorrecta deaddChildViewController:
especialmente si olvida llamarsuper
.UIViewController
probablemente depende de que usted mantenga el patrón. Tal vez considerará que el estado es inconsistente si sabe que ha recibidoaddChildViewController:
pero nunca recibe los otros dos mensajes. Ya sea que esto suceda debido a queUIViewController
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.