2011-08-09 10 views
1

私のアプリは質問のゲームです。私はQuestion_1と呼ばれるビューコントローラを持っています。これはすべての質問をロードする唯一のビューコントローラです。私はHowToPlayと呼ばれる別のクラスに配列を設定しました。この配列には、各質問を表す文字列が読み込まれます。 Question_1viewDidLoadメソッドでは、質問をランダムに選択して、質問のテキストを変更します。ユーザーが次のボタンを押すと、ロードする配列に何も残っていないことがわかるまで、コントローラーを介してゲームをロードします。ここでトラブル解除ビューコントローラ

は、私が質問をリロードするために私のnibファイルをロードしています方法です:

[background release]; 
[menu release]; 
[changeOnWrong release]; 
[callPauseLabels release]; 
[youArePaused release]; 
[only1Pause release]; 
[resume release]; 
[afterPause release]; 
[pause release]; 
[timerString release]; 
[timerLabel release]; 
[trueButton release]; 
[falseButton release]; 
[continueButton release]; 
[showYesNo release]; 
[scoreAmmount release]; 


callPauseLabels = nil; 
afterPause = nil; 
countDown = nil; 
Question_1 *Q1 = [[Question_1 alloc] initWithNibName:@"Question 1" bundle:nil]; 

Q1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:Q1 animated:YES]; 

[Q1 release]; 
Q1 = nil; 

私がいる問題は、このビューが再ロードされますたびに、それは古いものを解放しないということです、記憶に残っています。それは、それぞれのView Controllerが他のView Controllerの上にロードされ続けるようなものです。古いView Controllerをリリースする必要があります。私はこのようなことを試してみました:

[self dismissModalViewControllerAnimated:NO]; 
[self.parentViewController dismissModalViewControllerAnimated:NO]; 

それはまだメモリから古いビューを解放しません。

+0

ARCの使用を開始するのが正しい日のように見えます! – jtbandes

+0

それだけのベータ版の部分は、私はそれからアプリストアにアップロードできないだろうか? – Jacob

+0

ラベルのテキストを変更したり、タイマーデータを更新したり、ボタンのステータスを更新したりすることができます。オブジェクトの読み込みと解放の代わりに – tipycalFlow

答えて

1

このビューコントローラーを何度も表示する場合は、それを放棄してもう一度ロードする必要はありません。 ivarでそれを保持し、各質問ごとにそれを再設定してください。

しかし、あなたの質問への答えに、あなたは

[self.parentViewController dismissModalViewControllerAnimated:NO]; 

「のような」何かをする必要がありますしかし、あなたはナビゲーションコントローラまたはタブバーのコントローラを使用していない場合は、parentViewControllerは設定されません。あなたはそれを自分で設定する必要があります(必ずしも安全であるとは限りません;私はそれを決してしません)、あるいはあなたの親を追跡するために別の変数を設定します(私は通常代理人を使います)。次に、あなたはこれを行うでしょう:

[self.delegate dismissModalViewControllerAnimated:NO];