这4个文件与此帖子相关:

FirstViewController有一个按钮(不在导航栏上,是一个单独的按钮),当按下该按钮时,页面应卷曲以显示FilterViewController。

FirstViewController.h

- (IBAction)searchOptions:(id)sender;

FirstViewController.m:
- (IBAction)searchOptions:(id)sender {
    FilterViewController *ctrl = [[FilterViewController alloc] initWithNibName:@"FilterViewController" bundle:nil];
    [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil];

    [self.navigationController pushViewController:ctrl animated:NO];
}

在FilterViewController上,它具有一些UI内容,您按下一个按钮,保存UI内容,然后页面向下滚动以显示FirstViewController。

FilterViewController.h:
- (IBAction)backToMap:(id)sender;

FilterViewController.m:
- (IBAction)backToMap:(id)sender {
    FirstViewController *ctrl = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
        [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:nil];

        [self.navigationController popViewControllerAnimated:YES];
}

这里的问题是保留UIView。如何保留UIView?

当我单击FirstViewController上的按钮时,动画起作用并且显示页面。但是在FilterViewController上,当我单击按钮时,它崩溃并显示以下错误:

EXC_BAD_ACCESS(代码= 2,地址= 0x8)

在输出控制台中,它说:(lldb)
页面卷曲后,我有了步进器,当我单击步进器时,调试器中出现了相同的错误。

更新:我已跟踪内存位置错误:http://i.imgur.com/dL18H9Z.png

谢谢。

最佳答案

我注意到的一件事是,您先推送一个视图控制器,然后再推送另一个语法为“back”的视图控制器。这可能是问题所在:导航堆栈是一个堆栈。如果从视图0开始,则推入视图1,如果要返回视图0,则“弹出”视图1,而不是再次推入视图0。

所以在:

- (IBAction)backToMap:(id)sender {
       FirstViewController *ctrl = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
        [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:nil];

        [self.navigationController popViewControllerAnimated:YES];
}

10-08 17:06