2009-03-11 15 views
0

タブバー自体、ナビゲーションコントローラ、または???のようなものがdealloc'ingされているようですが、これは特定のビューに移動すると発生しますコントローラーを押してからタブバーを特定のタブに合わせます(たとえば、中央のタブに3つのタブを押しても問題はありませんが、右端のタブをクリックするとクラッシュします)。私のプログラムは基本的に完全で、この時点ではかなり大きなコードベースを持っています。誰でもこれをデバッグするための提案があります - 私はこれまで作業を待っていました。私の感覚は、deallocルーチンと隣接するコード内のすべてのリリースを調べることです。あなたが示唆することができる「マニュアル」が少ないものはありますか?ありがとう!タブバー問題: - [UILayoutContainerViewハッシュ]:メッセージが割り当て解除されたインスタンスに送信されました

答えて

1

もっと知ることなく、ここで私はそれについてどうやって行くのですか?

  • ログビューアで、gdbで例外が発生した後にbacktraceと入力します。うまくいけば、これはあなたに何回オブジェクトが何回も自由に表示されていることを示す正確な行を与えます。

  • このオブジェクトへの参照を探し、不必要なリリース、自動解放などを検査で見つけることができるかどうかを確認してください。実行パスが所有していないもの(allocを介して)を/ autoreleaseで解放しないでください。

  • (このオブジェクトにretainCountメッセージを送信することで)このオブジェクトの保持カウントが印刷されることがあります。開発者のドキュメントでは、これは無意味で実り多いものではないことが強く示唆されていますが、私が偶然に何かを解放したときに、

    +0

    上記のデバッグを使用して解決しました。 1)nibでロードされたビューコントローラのloadViewの代わりに - (void)viewDidLoadを使用しました。 2)も変更されました: UIView * contentView = [self.navigationController view]; self.view = contentView; [contentView release]; to: self.view = [self.navigationController view]; – Rob

    +0

    醜いフォーマットのため申し訳ありませんが、サイトでは「既に回答している質問」にコメントを残すことをおすすめします。 – Rob

    +0

    あなたのポイント2の変化は理にかなっています。 contentViewのUIViewはallocしていないので、コードパスは所有していません。したがって、[contentView release]メッセージは無関係でした。よくやった! – hyuan

    関連する問題