objective-c uinavigationcontroller exc-bad-access

objective c - Cómo reemplazar el viewController actual con un nuevo viewController



objective-c uinavigationcontroller (1)

Usar categoría para reemplazo del controlador:

// UINavigationController+ReplaceStack.h @interface UINavigationController (ReplaceStack) - (void) replaceLastWith:(UIViewController *) controller; @end // UINavigationController+ReplaceStack.m #import "UINavigationController+ReplaceStack.h" @implementation UINavigationController (ReplaceStack) - (void) replaceLastWith:(UIViewController *) controller { NSMutableArray *stackViewControllers = [NSMutableArray arrayWithArray:self.viewControllers]; [stackViewControllers removeLastObject]; [stackViewControllers addObject:controller]; [self setViewControllers:stackViewControllers animated:YES]; } @end

Estoy tratando de reemplazar mi viewController actual por uno nuevo. Pude hacer esto antes pero tengo algunos problemas con BAD_ACCESS.

Este es el código que se ejecutará cuando deseo reemplazar la vista actual por una nueva.

(La función se llamará utilizando una propiedad local "self.some_data" (no atómica, retener))

-(void) labelSelected:(SomeDataObject*) some_data{ SomeViewController *viewController = (SomeViewController*)[[ClassManager sharedInstance] viewControllerForClassIdentifier:@"com.somename" fromPlistFileName:@"iPhoneScreenList"]; viewController.data = (NSObject*)some_data; [some_data retain]; //[self.navigationController pushViewController:viewController animated:YES]; UINavigationController *tempNavigationController = self.navigationController; [[self retain] autorelease]; [tempNavigationController popViewControllerAnimated:FALSE]; [tempNavigationController pushViewController:viewController animated:TRUE]; }

Aquí todo funciona bien. El problema es que si lanzo el nuevo "viewController" se bloquea. Y si elijo:

[tempNavigationController popViewControllerAnimated:TRUE];

Obtuve un comportamiento realmente extraño donde el controlador nunca se reemplaza y vuelvo al controlador raíz y la barra de navegación tiene dos capas de texto.

Y si hago esto:

[tempNavigationController pushViewController:viewController animated:FALSE];

Recibo BAD_ACCESS y la aplicación falla. Funcionó antes, pero ya no.

¿Qué estoy haciendo mal?

¡Gracias!