我遇到了重大的内存管理问题。在少量使用该程序后,它将崩溃内存不足。我终于找到了原因,每次创建新的ViewController而不是访问实例时,我都在创建一个新实例。
因此,app加载并实例化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];
从FilterViewController
FirstViewController
- (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];
}
答案 0 :(得分:1)
如果您使用的是presentViewController
,则可以通过调用[self dismissViewControllerAnimated:YES];
返回上一个视图。您可以在当前正在创建新控制器的方法中执行此操作。
如果您要进入导航控制器,则会从导航控制器弹出:[self.navigationController popViewControllerAnimated:YES];
。
根据您的上次更新,您似乎没有导航控制器,只是将视图添加为子视图并存储过滤器视图控制器。这使得生活变得更加复杂,并且删除它的正确方法是设置委托关系,以便过滤器视图控制器在完成时回调到第一个视图控制器,然后第一个控制器转换视图并且nil是引用。
如果可以,请更改为正确使用导航控制器。您已经有一半的代码,但第一个视图控制器似乎不在导航控制器中。如果你使用导航控制器,生活将很容易......