popViewControllerAnimated不工作,但后退按钮工作

时间:2010-05-03 12:53:00

标签: objective-c iphone-sdk-3.0 uinavigationcontroller

我正在创建一个基于Utility模板的应用程序。主屏幕包含一个带有几个按钮的菜单,每个按钮创建一个不同的翻转侧视图。在其中一个侧面视图中,我还配置了一个导航控制器,只要我已经激活了NavigationBar,它就可以正常工作......我可以推动视图,但我必须使用“后退”按钮返回我的翻转侧视图,它将是导航控制器的根。如果我尝试使用“popViewControllerAnimated”返回,使用按钮正确配置,而不是使用NavigationBar的“后退”按钮,则会出现问题。我的应用程序由于某种原因崩溃,我无法理解为什么。

我可以使用NavigationBar中的“后退”按钮并忘记问题,但我更愿意拥有自己的按钮才能返回。

我的应用包含以下内容:

我的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开始我的翻转视图:

- (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,我用按钮推送NavigationController的第二个视图:

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

最后,我的FuelUplift2ViewController.m,当应用程序返回时应用程序崩溃:

- (IBAction)backFromFuelUplift2View {
    [self.navigationController popViewControllerAnimated:YES];
}

我不知道这一切是否有意义,我目前正在开始我的第一个应用程序,并且仍在学习,感谢传统的试用错误方法。然而,我看不出这个问题的原因,并希望得到任何帮助。

非常感谢,

马努

2 个答案:

答案 0 :(得分:1)

我终于能够解决我的问题了。

为了在我的UINavigationController中创建第二个视图,我有了这个:

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

我从另一个论坛上获取了该代码,它确实可以立即运行,所以我无法想象我会遇到问题。使用上面的代码,如果我理解正确,我正在为我的第二个视图创建一个新的UIViewController,这就是为什么我能够切换到第二个视图并有一个工作的“后退”按钮。

无论如何,为了配置我自己的按钮返回,我应该写下以下内容:

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

显然我正在初始化一个随机的UIViewController,但由于我没有正确指出它是哪一个(FuelUplift2ViewController),我返回第一个视图的方法无法正常工作。

这可能是一个非常基本的问题,但我花了几个小时才意识到这个问题,我很高兴能够自己找到它,遵循我的代码并使用一点常识。

答案 1 :(得分:0)

当询问崩溃时,显示你得到的信息是一个非常好的主意。

你展示的代码没有明显的错误,尽管“self.delegate”行让我怀疑。您应该检查属性的声明方式,以及是否双重释放它。