10

Esta pregunta se ha hecho antes, pero las respuestas que pude encontrar fueron de 2009 y no se ajustan a mi problema. Permítanme reiterar el problema.Recibe una notificación cuando un controlador de vista está a punto de aparecer en iOS4

Tengo un UINavigationController que genera y empuja un montón de UIViewController s diferentes en su pila. Una de esas ofertas con algunas operaciones de Datos de Núcleo que necesitan ser guardadas cuando ese VC en particular sale de la pila. No se centre en la parte de datos básicos, se trata de la explosión.

¿Cómo puedo conectarme en el momento en que el UIViewController saldrá de la pila?

  • Esperaba un método delegado de algún tipo, pero no pude encontrarlo. El protocolo UINavigationControllerDelegate es muy escaso.
  • Entonces empecé a pensar de utilizar viewWillDisappear, pero que uno es también llamada si otro punto de vista es empujado hacia la pila, por lo que no proporciona el momento adecuado.
  • This answered question, from 2009, opta por mirar el viewWillAppear del controlador de vista que estamos 'apareciendo', pero como esa llamada no tiene una referencia al VC que necesita hacer la comprobación, esto es insatisfactorio e introducirá un nivel de dependencia que es contraproducente (el VC es utilizado por varias NC).
  • Another answered question, also from 2009, opta por la subclase UINavigationController y reescribe el método popViewControllerAnimated :. O, alternativamente, utilice dealloc de VC. Mi instinto me dice que no puede ser el camino a seguir.
  • Finalmente está one last recent question from march 2011, pero nadie se preocupó por responderlo.

Eso me deja en mi actual estado de ánimo insatisfecho. ¿Hay alguien por ahí con una mejor solución para encontrar el momento en que su UIViewController aparece en la pila de un UINavigationController?

Cheers,
EP.

+0

que se enfrentan al mismo problema. Sin embargo, puedo añadir un poco de información de acuerdo con http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/DeprecationAppendix/AppendixADeprecatedAPI.html tanto viewDidUnload y viewWillUnload están en desuso bajo iOS6 –

Respuesta

9

viewWillDisappear es el delegado apropiado. Usted tendrá que añadir la lógica dentro de este método si desea determinar si el actual vista está siendo aparecido o una nueva vista está siendo empujado . Eso ha sido respondido aquí - viewWillDisappear: Determine whether view controller is being popped or is showing a sub-view controller

+0

el clavo, envuelto en una categoría y funciona como un encanto. Gracias @Jason! – epologee

+9

Acabo de echarle un vistazo a tu respuesta. Se ve bien, pero demasiado complejo para lo que realmente se necesita. Sugiero que esto podría estar más limpio: 'if (! [Self.navigationController.viewControllers containsObject: self]) { // ¡MOSTRADO! } ' –

+0

Bueno uno. Sería extraño tener el mismo VC en la pila de un controlador de navegación dos veces de todos modos. ¡Aclamaciones! – epologee

0

Creo que iría en la otra dirección en esto, y trataré de captar el sondeo de la vista individual Controles en lugar de la navigationController. Para un viewController individual, parecer que está siendo desasignado, y eso está totalmente enganchado.

Subclase UIViewController, implemente su notificación en su -dealloc. Asegúrese de llamar al [super dealloc].

Luego tenga cada vista que inserta en su subclase de controlador de navegación su nueva subclase de controlador de vista personalizada. Pueden hacer lo que sea que hagan en su propia viewDidUnload, y luego llamar al [super dealloc] (en este caso super es su subclase UIViewController) para activar la notificación.

+0

Esto no funcionaría. Si extrae un VC de una pila de Controles de navegación, no pasará por -viewDidUnload –

+0

@Pier - ¿Está seguro? He hecho algo como esto, pero ha pasado un tiempo ... ¿Pude atrapar 'dealloc' tal vez? –

+0

Sí -se llama a dealloc. viewDidUnload solo se invoca cuando el VC recibe una advertencia de memoria y no es el controlador de vista superior. –

Cuestiones relacionadas