0

我遇到了主要的内存管理问题。使用该程序后,它会因内存不足而崩溃。我终于找到了原因,每次我创建一个新的 ViewController 而不是访问实例时,我都是在创建一个新实例。

所以应用程序加载并实例化了 FirstViewController。您单击一个实例化FilterViewController. 从这里返回时,FirstViewController我正在创建一个的实例,如下所示:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName
        :@"MainStoryboard" bundle:nil];

    FirstViewController *fvc = [storyboard 
        instantiateViewControllerWithIdentifier:@"FirstViewController"];

    fvc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

并重复过程。有什么方法可以在不重新实例化的情况下呈现视图控制器?我即将提交应用程序(希望明天),所以我需要尝试对此进行排序。谢谢!

这是 ViewController 的介绍。

[self presentViewController:fvc animated:YES completion:nil];

介绍FilterViewControllerFirstViewController

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

    self.filterViewController = ctrl;

    [self.navigationController pushViewController:self.filterViewController animated:NO];

}
4

1 回答 1

1

如果您正在使用presentViewController,您可以通过调用 返回到上一个视图[self dismissViewControllerAnimated:YES];。您可以在当前创建新控制器的方法中执行此操作。

如果您正在推入导航控制器,您将从导航控制器中弹出:[self.navigationController popViewControllerAnimated:YES];.


根据您上次的更新,您似乎没有导航控制器,您只是将视图添加为子视图并存储过滤器视图控制器。这确实使生活变得更加复杂,删除它的正确方法是设置委托关系,以便过滤视图控制器在完成时回调第一个视图控制器,然后第一个控制器转换视图并且 nil 是引用。

如果可以,请更改为正确使用导航控制器。您已经有了一半的代码,但第一个视图控制器似乎不在导航控制器中。如果你使用导航控制器,生活会很容易......

于 2013-07-21T22:12:35.700 回答