I am creating an application based on the Utility template. The main screen consists of a menu with several buttons, each of which creates a different flip-side view. In one of those flip-side views I also configured a Navigation Controller, which works perfectly as long as I have the NavigationBar activated… I can push the view but I have to use the “back” button to return to my flip-side view, which would be the root of the Navigation Controller. The problem comes if I try to go back using “popViewControllerAnimated”, properly configured with a button, instead of the “back” button of the NavigationBar. My application crashes for some reason and I am not able to understand why.
I could just use the “back” button in the NavigationBar and forget about the problem, but I would prefer to have my own button in order to go back.
My app consists of the following:
My APPDelegate.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
MenuViewController *menuController = [[MenuViewController alloc] initWithNibName:@"MenuView" bundle:nil];
self.menuViewController = menuController;
[menuController release];
menuViewController.view.frame = [UIScreen mainScreen].applicationFrame;
[window addSubview:[menuViewController view]];
[window makeKeyAndVisible];
return YES;
}
MenuViewController.m starting my flip-side view:
- (IBAction)showFuelUpliftView {
FuelUpliftViewController *controller = [[FuelUpliftViewController alloc]
initWithNibName:@"FuelUpliftView" bundle:nil];
controller.delegate = self;
controller.title = @"Fuel Uplift";
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
[navController setNavigationBarHidden: NO];
navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:navController animated:YES];
[navController release];
[controller release];
}
FuelUpliftViewController.m, where I push the second view of the NavigationController with a button:
- (IBAction)showFuelUplift2View:(id)sender {
UIViewController *controller = [[UIViewController alloc] initWithNibName:@"FuelUplift2View" bundle:nil];
controller.title = @"Settings";
[self.navigationController pushViewController:controller animated:YES];
[controller release];
}
And finally, my FuelUplift2ViewController.m, where the app crashes when trying to go back:
- (IBAction)backFromFuelUplift2View {
[self.navigationController popViewControllerAnimated:YES];
}
I do not know if all this makes sense, I am currently beginning with my first application and am still learning thanks to the traditional trial an error method. Nevertheless, I cannot see the reason for this problem and would appreciate any help I can get.
Thanks very much,
Manu
I was finally able to solve my problem.
In order to create the second view in my UINavigationController, I had this:
I took that code from another forum and it did work straight away, so I could not imagine that I was going to have problems with it. With the above code, if I understand it correctly, I’m creating a new UIViewController for my second view, and that’s why I was able to switch to that second view and have a working “Back” button.
Anyhow, in order to configure my own button to go back, I should have written the following:
Apparently I was initializing correctly a random UIViewController, but as I was not indicating properly which one it was (FuelUplift2ViewController), my method to return to the first view could not work properly.
This was maybe a very basic question, but it took me several hours to realize the problem and I am glad I could find it by myself, juts following my code and using a little bit of common sense.