0

これは、問題と私の実装に関する議論であり、問​​題を引き起こしているようです。

私のアプリには、タブ バーとナビゲーション コントローラーがあります。各タブ内でビューに移動できます。タブ バーは、サブ ビューからクリックして戻るまで非表示になります。

タブごとにナビゲーションコントローラーがあり、これらはアプリデリゲートでアウトレットとして宣言されており、@class tab1navcontroller

典型的な使用法は次のとおりです。

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] 
       delegate];
[delegate.tab1NavController pushViewController:nextController animated:YES];

過去にこれで多くの問題が発生したことはなく、当時読んでいた本からアプローチをコピーしたと思います。

ただし、数か月前に同僚と話し合ったところ、アプリにはナビゲーション コントローラーを 1 つだけ使用する必要があるとのことでした。

当時、コード (上に示したもの) を置き換えてself.navigationcontroller代わりに使用しようとしましたが、これにより問題が発生しました。それらが何であったか思い出せませんが、それらの修正は破棄しました。

今日、ビューをプッシュしてすぐにタップするとエラーが発生しました。また、アプリをゾンビ プロファイラーで実行したところ、上記のコードに問題があることがわかりました。

上記のコードがリークを引き起こしている可能性があると思います。

どのアプローチが最適で、ここからどこに行くべきかわかりません。

4

1 に答える 1

0

@Dimaがコメントで言ったように、あなたの同僚は間違っていました。私のアプリには、ウィンドウの rootViewController として 1 つの tabbarController があります。プロパティ、その viewController 配列、または個々のナビゲーション コントローラーで公開できます。複数のタブでナビゲーションコントローラーを再利用することはできません-それぞれに1つ、または組み合わせて。つまり、私の tabbarController には、4 つの naviationControllers と 1 つのプレーンな UIViewController サブクラスがあります。

タブ バー コントローラーはすべての viewController を保持し、navigationController はすべての viewController を保持します。そうは言っても、ポップされるviewControllerへの「割り当て」タイプの参照がある場合、問題が発生します。

于 2012-09-26T21:56:22.893 に答える