2011-07-15 28 views
1

を割り当て解除しました。 MembersDetailViewControllerは、マップを表示するには、別のビューを開くことができます。のUITableViewControllerは、私は次のコードで奇妙な問題を抱えている

MapViewController *mapViewController = [[MapViewController alloc] 
initWithNibName:@"MapViewController" bundle:nil]; 
mapViewController.delegate = self; 
mapViewController.latitude = @"54.5944504";//self.latitude; 
mapViewController.longitude = @"-5.6592376";//self.longitude; 

[mapViewController setModalTransitionStyle:UIModalTransitionStylePartialCurl]; 

[self presentModalViewController:mapViewController animated:YES]; 
[mapViewController release]; 

問題がMapViewControllerを却下し、戻るボタンがMemberDetailViewControllerに押されたときに、私は次のエラーメッセージを取得することである:

-[MembersDetailViewController retain]: message sent to deallocated instance 0x51663e0 

場合私は[mリリース]をコメントアウトして、すべて正常に動作します。 MapViewControllerが呼び出されていない場合も、すべてがOKです。なぜこれが起こっているのか分かりません。私はinitを割り当てると解放する必要があるという印象を常に受け​​ていましたか?

ご協力いただければ幸いです。

+1

あなたは何が良いようです。あなたはそれが他のどこかで過剰にリリースされていないと確信していますか? – jtbandes

答えて

1

あなたはmをリリースする必要がありますが、そうすることでそのビューコントローラの所有権を放棄することは間違いありません。それはあなたがナビゲーションスタックにプッシュしたので、しばらくは間違っているので、ナビゲーションコントローラはそれを保持します。しかし、 "戻る"ボタンを押すと、navコントローラはそれをスタックからポップして解放し、他の誰もそれを所有していないので、その時点で割り当てが解除されます。その時点からもう一度参照すると、説明したようなエラーが発生します。

上記の方法でmが指し示すビューコントローラを参照する必要がある場合は、テーブルビューコントローラに「保持」プロパティを作成し、mに設定することをお勧めしますmをリリースする前にディテール・ビュー・コントローラーが不要になったら、そのプロパティーをnilに設定してください。最後にディテール・ビュー・コントローラーが解放され、割り当てが解除されます。

0

ありがとうございます。私はついにこの問題を発見した。デリゲートを使用してモーダルビューコントローラを解除していました。そのdeallocメソッドで、私は解放されていました。これは、MembersDetailViewControllerを指していました。だから、jtbandesのコメントで示唆されたように、過剰リリースのケースでした。

関連する問題