2011-12-12 22 views
7

Todos mis controladores de vista extienden mi propia BaseViewController: UIViewController, y en esto me han anuladoparando eventos del ciclo de vida IOS5 automáticamente siendo llamados

- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers { 
    return NO; 
} 

Sin embargo, el IOS 5 simulador ha decidido hacer caso omiso de esto y continúa a llamar a mi los métodos viewWillAppear etc. en mi jerarquía anidada de UIViewController.

He hecho lo mismo en otro proyecto y funcionó bien. ¿Hay algo más que me falta para que me escuche?

Respuesta

4

Resulta que también hay que utilizar este método también:

UIViewController addChildViewController 

Así que al hacer esto:

[self addChildViewController:_browserViewController]; 
[browserView addSubview:_browserViewController.view]; 
[_browserViewController didMoveToParentViewController:self]; 

..y regresar NO a partir de automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers

... que se detenga los métodos del ciclo de vida de la vista son llamados dos veces.

+1

Entonces, ¿cuál es la solución para hacer algo que funcione tanto en iOS 4 como en 5 – pottedmeat

+0

Bueno, si está ejecutando iOS 4, no recibirá las llamadas automáticas a sus controladores de vistas anidados, por lo que no tiene el cuestión de que las cosas se llamen dos veces. La jerarquía de contenedores UIViewController solo se introdujo en iOS 5. Las aplicaciones iOS 4 deberían funcionar como siempre. Solo ten cuidado de llamar a selectores indefinidos que son nuevos para las versiones posteriores de iOS. – bandejapaisa

+0

Entonces, la respuesta es que tiene que preguntar si la instancia puede responder a los métodos '-addChildViewController:' y '-didMoveToParentViewController:' antes de llamarlos. – pottedmeat

Cuestiones relacionadas