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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top