希望你能帮我解决这个问题。 我遇到以下代码的问题:
-(IBAction)swapViews:(id)sender{
myappAppDelegate *delegate = (myappAppDelegate *) [[UIApplication sharedApplication] delegate];
ThirdViewController *thirdView = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[delegate switchView:self.view toView:thirdView.view];
[thirdView release];
}
正如您所看到的,我已经分配了我的ViewController并在之后发布了它。问题是,当我将视图更改为我的ThirdViewController,然后想要返回到上一个视图时,应用程序崩溃了。 这就是我回到之前观点的方式:
-(IBAction)goBack:(id)sender{
myappAppDelegate *delegate = (myappAppDelegate *) [[UIApplication sharedApplication] delegate];
FirstViewController *firstView = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[delegate switchView2:self.view toView:firstView.view];
[firstView release];
}
释放View时再次出现同样的问题。 如果我不释放视图,应用程序不会崩溃但是有很多内存泄漏并且考虑到我有超过15个ViewControllers,如果我长时间使用它,应用程序最终会崩溃。
任何想法我做错了什么? ps:我正在使用委托来进行视图的动画/转换。
谢谢!
编辑:switchView:toView:下面的代码
-(void)switchView:(UIView *)view1 toView:(UIView *)view2 {
[UIView beginAnimations:@"Animation" context:nil];
[UIView setAnimationDuration:0.75];
[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.window cache:YES];
[view1 removeFromSuperview];
[window addSubview:view2];
[UIView commitAnimations];
}
答案 0 :(得分:1)
不想听起来像Obvious先生,但除非切换到的视图在其控制器释放之前保留在您的委托中,否则您在切换回之前在已发布的视图上操作,因此崩溃。
如果您的switchView:toView
方法在UIViewController
上运行,而不仅仅是UIView
,那可能会更好。然后你可以保留你需要的viewController,并在不再需要时释放它。
但就目前而言,我们可以从您当前的问题描述中获取所有内容。显示switchView:toView:
和switchView2:toView:
方法的代码,以及崩溃日志,我们将从那里开始。