2011-06-24 10 views
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]; 

}

+0

'switchView:toView:'メソッドのコードを表示します。 – jamapag

+0

コード行ごとに4つのスペースを使用してください。 HTMLコードタグはサポートされていません(よく)。 ;-) –

+0

[myappAppDelegate switchView:]は何をしますか?そして... [switchView2:]? – onnoweb

答えて

1

以下のコードは明白氏のような音にしたくないが、ビューはそのコントローラー前に、あなたのデリゲート内に保持されているに切り替えない限り、リリースされたビューで操作しているので、元の状態に戻ります。したがって、クラッシュします。

switchView:toViewメソッドがUIViewControllerで操作されている場合は、おそらくUIViewではないでしょう。その後、ビューが必要なviewControllerを保持し、必要がなくなったら解放することができます。

しかし、今のところそれはすべてあなたの現在の問題の説明から取ることができます。 switchView:toView:switchView2:toView:のコードを表示し、クラッシュログを確認してください。

+0

お返事ありがとうございます! myappAppDelegate switchView:toViewには次のコードがあり、トランジションエフェクトの作成に使用されます。 switchView2は同じコードを有している、唯一の代わりTransitionCurlUp - > TransitionCurlDown ' - (ボイド)のSwitchView:(UIViewの*)VIEW1 toView:(UIViewの*)VIEW2 { [UIViewのbeginAnimations: "アニメーション" は、文脈@:なし]; [UIView setAnimationDuration:0.75]; [UIViewsetAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.window cache:YES]; [view1 removeFromSuperview]; [ウィンドウaddSubview:ビュー2]; [UIView commitAnimations]; \t} ' – Andres

+0

はい、あなたは(addSubview :)を介してビューを保持しますが、コントローラ自身は保持しません! – Johnmph

+0

それを指摘してくれてありがとう。私はこれにかなり新しいです。だから私はUIViewControllerだけでなく、UIViewを保持する必要がありますか?はいの場合、それを行う最善の方法は何ですか? – Andres