开发者

popViewControllerAnimated not working, but back button works

开发者 https://www.devze.com 2022-12-28 18:47 出处:网络
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

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 = [[FuelUpliftViewContr开发者_如何学JAVAoller 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:

- (IBAction)showFuelUplift2View:(id)sender {
    UIViewController *controller = [[UIViewController alloc] initWithNibName:@"FuelUplift2View" bundle:nil];
    controller.title = @"Settings";
    [self.navigationController pushViewController:controller animated:YES];
    [controller release];
}

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:

FuelUplift2ViewController *controller = [[FuelUplift2ViewController alloc] initWithNibName:@"FuelUplift2View" bundle:nil];

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.


When asking about a crash, it is a very good idea to show the message you get.

There is nothing obviously wrong in the code you show, although the "self.delegate" line makes me suspicious. You should check how the property is declared, and if you are double releasing it.

0

精彩评论

暂无评论...
验证码 换一张
取 消