costumbre UIViewController titleview aplicación se bloquea
-
25-09-2019 - |
Pregunta
Tengo una aplicación para el iPhone de navegación basado. Cuando se pulsa sobre una celda de la tableview un nuevo UIViewController se empuja a la pila de navegación. En este controlador de vista estoy fijando un titleview personalizado en el método viewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
// Setup custom navigation title
[self setTitle:@"Mediaportal"];
navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];
[navItem setTitle:[theServer name]];
[navItem setSubTitle:@""];
[self.navigationItem setTitleView:navItem.view];
…
}
Una vez que enciendo de nuevo a la RootViewController:
[self.navigationController popToRootViewControllerAnimated:YES];
la aplicación se bloquea con el siguiente error (NSZombieEnabled = SÍ):
*** -[CALayer retain]: message sent to deallocated instance 0x5a5fd80
Por lo que puedo ver el RootViewController todavía intenta acceder a la titleview costumbre, que se cancela la asignación con el segundo controlador de vista. Una vez que comento hacia fuera la parte titleview costumbre en mi código de la aplicación funciona. Traté de establecer el navigationItem.titleView a cero (como se encuentra en los documentos de manzana) antes de la segunda ViewController se desasigna, pero eso no ayuda.
¿Tiene una pista de lo que pueda hacer para prevenir este accidente?
Gracias, Marcos.
Solución 2
Finalmente encontré la solución para ello (una bastante simple uno). Tengo que alloc y INIT la navItem a través de su propiedad, entonces se está retenido:
self.navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];
Otros consejos
Tenía este mismo error exacta de un mes o así lo hace, exactamente la misma situación. Me volvía loco.
he descubierto que el viewController yo estaba haciendo estallar tampoco había sido desasignado en absoluto. Tenía una costumbre UIButton subclase añadido a ese punto de vista, sin embargo que había sido desasignado cuando el segundo punto de vista había sido empujado. Así que cuando saltan hacia atrás, el UIButton no estaba allí.
Comprobar la vista que están apareciendo de nuevo a, para asegurar que no tiene ninguna clase que está desasignar, o está siendo autoreleased sin conocimiento del usuario.
Espero que esto ayude.