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!