Objective c popViewControllerAnimated不起作用,但“后退”按钮起作用

Objective c popViewControllerAnimated不起作用,但“后退”按钮起作用,objective-c,iphone-sdk-3.0,uinavigationcontroller,Objective C,Iphone Sdk 3.0,Uinavigationcontroller,我正在基于实用程序模板创建一个应用程序。主屏幕由一个带有多个按钮的菜单组成,每个按钮创建一个不同的翻转侧视图。在其中一个翻转侧视图中,我还配置了一个导航控制器,只要激活导航栏,它就可以完美工作。。。我可以按视图,但我必须使用“后退”按钮返回到我的反向视图,这将是导航控制器的根。如果我尝试使用“popViewControllerAnimated”返回,问题就出现了。popViewControllerAnimated正确配置了一个按钮,而不是导航栏的“back”按钮。我的应用程序由于某种原因崩溃,我

我正在基于实用程序模板创建一个应用程序。主屏幕由一个带有多个按钮的菜单组成,每个按钮创建一个不同的翻转侧视图。在其中一个翻转侧视图中,我还配置了一个导航控制器,只要激活导航栏,它就可以完美工作。。。我可以按视图,但我必须使用“后退”按钮返回到我的反向视图,这将是导航控制器的根。如果我尝试使用“popViewControllerAnimated”返回,问题就出现了。popViewControllerAnimated正确配置了一个按钮,而不是导航栏的“back”按钮。我的应用程序由于某种原因崩溃,我无法理解原因

我可以只使用导航栏中的“后退”按钮,忘记这个问题,但我更希望有自己的按钮,以便返回

我的应用程序由以下部分组成:

FuelUplift2ViewController *controller = [[FuelUplift2ViewController alloc] initWithNibName:@"FuelUplift2View" bundle:nil];
我的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];
}
FuelUppltViewController.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];
}
我不知道这一切是否有意义,我目前正从我的第一个应用程序开始,由于传统的试错法,我仍在学习。尽管如此,我看不出这个问题的原因,如果能得到任何帮助,我将不胜感激

非常感谢


Manu

当询问撞车事件时,最好显示您收到的信息


虽然“self.delegate”行让我怀疑,但您显示的代码中没有明显的错误。您应该检查属性是如何声明的,以及是否双重释放它。

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

为了在我的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),因此返回到第一个视图的方法无法正常工作


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

调试内存问题我在下面的文章中发现非常有用:特别是我建议您设置
NSZombieEnabled
MallocStackLogging
环境变量,并检查哪些变量确实失败。我将尝试一下,看看会发生什么,谢谢您的建议!非常感谢您的回复!我肯定需要检查该代表;我的应用程序基于Xcode中包含的实用程序,因此我使用的是相同的结构,并且没有更改任何与委托相关的内容。无论如何,这一定与此有关,因为我已经能够使其他应用程序在不使用委托的情况下与popViewControllerAnimated一起工作。我得到的消息(希望这是你的意思)是:**由于未捕获的异常zNSInvalidArgumentException终止应用程序,原因:'***-[UIViewController backFromFuelUplift2View]:未识别的选择器发送到实例0x3917440'我对这一切有一个疑问:如果我按下“Back”,为什么它工作得很好按钮,但如果我使用popViewControllerAnimated创建自己的方法,则不会?他们不应该做完全相同的事情吗?错误消息告诉你所有的。您将返回消息发送到了错误的对象。谢谢Paul,我刚才在这里看到了您的消息。我已经意识到问题是什么(现在我觉得有点愚蠢)。。。事实上,我向错误的对象发送了信息。谢谢你的帮助!