2

希望你能帮我解决这个问题。我遇到以下代码问题:

-(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];
}

释放视图时再次出现同样的问题。如果我不释放视图,应用程序不会崩溃,但是会有很多内存泄漏,并且考虑到我有超过 15 个 ViewController,如果我长时间使用它,应用程序最终会崩溃。

任何想法我做错了什么?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];

}

4

1 回答 1

1

不想听起来像 Mr. Obvious,但除非切换到的视图在释放其控制器之前保留在您的委托中,否则您在切换回之前对已释放的视图进行操作,因此会崩溃。

如果您的switchView:toView方法在UIViewControllers 上运行,而不仅仅是UIViews,可能会更好。然后你可以保留你需要它的视图的viewController,并在不再需要它时释放它。

但是现在,这就是我们可以从您当前的问题描述中得到的全部内容。显示switchView:toView:switchView2:toView:方法的代码,以及崩溃日志,我们将从那里开始。

于 2011-06-24T14:34:29.263 回答