我正在创建一个基于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];
}
我不知道这一切是否有意义,我目前正在开始我的第一个应用程序,并且仍在学习,感谢传统的试用错误方法。然而,我看不出这个问题的原因,并希望得到任何帮助。
非常感谢,
马努
答案 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”行让我怀疑。您应该检查属性的声明方式,以及是否双重释放它。