Приложение вылетает при правильном освобождении вида - PullRequest
2 голосов
/ 24 июня 2011

Надеюсь, вы можете помочь мне с этой проблемой.У меня проблемы со следующим кодом:

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

}

1 Ответ

1 голос
/ 24 июня 2011

Не хочу звучать как Мистер Очевидный, но если только вид, который переключен на, сохраняется в вашем делегате до того, как его контроллер будет освобожден, вы работаете с освобожденным видом перед переключением обратно, следовательно, происходит сбой.

Вероятно, было бы лучше, если бы ваши switchView:toView методы работали на UIViewController с, а не только UIView с.Затем вы можете сохранить viewController, вид которого вам нужен, и освободить его, когда он больше не нужен.

Но пока это все, что мы можем извлечь из вашего текущего описания проблемы.Покажите код методов switchView:toView: и switchView2:toView: и журнал аварий, и мы пойдем оттуда.

...