0

古い iOS ハードウェアを使用している人々からの多くの要求に応じて、私は現在、iOS 3 で動作するようにアプリをリファクタリングおよび最適化しています。テストした iPhone 3G ユニット。

グリッチは iOS 4 で修正されたようですが、それ以前に、他の誰かがこのグリッチを抱えていて、(比較的エレガントな) 回避策を見つけていたのではないかと思っていました。

問題は、以下に示すとおりです。メモリ警告が発生し、画面外のすべてのビューが解放されると、タブ バーを含むビュー コントローラーを画面に戻すと、その中にあるはずの UITabBarItems がすべてなくなります。私が見る限り、それらはまったく描かれていません。つまり、タブ バーをタップしても効果がありません。ブレークポイントを設定し、メモリ内の UITabBar とそのアイテムを調べた後、それらはすべてそこに残っています (つまり、解放されていません)。ただし、コントローラーの loadView メソッドで UITabBar が再作成されたときに再描画されていません。

私のアプリは、独自のバージョンの UITabBarController を実装したという点で、公式の Twitter アプリと同様に機能するため、親 UINavigationController との統合を適切に制御できます。ただし、すべての子ビュー コントローラーがそれぞれの UITabBarItems を処理し、クラスの init メソッド内で初期化するように、元の UITabBarController クラスにできるだけ近づけて設定しました。アクセサー メソッドを介して子ビュー コントローラーが TabController オブジェクトに渡されると、tabBarItems がアクセスされ、UITabBar ビューに追加されます。

この動作を以前に見たことがあり、修正方法を知っている人はいますか? これは iOS 4 ですでに動作しているので、非常に簡単な修正があることを願っています。

どうもありがとう!

メモリ警告発生後のホーム画面

4

1 に答える 1

0

少し調査した後、これに対する解決策を見つけたと思います。これは私が求めていた最もエレガントなソリューションではありませんが、間違いなく機能します。

メモリ警告がトリガーされた後、UITabBarItem オブジェクトに何かが起こって、基本的に破損していると推測しています。多くのことを試しました (UITabBar のフラッシュ、コントローラー配列の再作成など) が、何も機能しませんでした。

UITabBarItems を完全に破棄し、その場所に新しいものを割り当てると、それらが機能することを最終的に発見しました。:)

したがって、これに対する私の最終的な解決策は、コントローラーの viewDidLoad メソッドに追加の条件を追加することでした。検出されたシステムが iOS 3 であり、UITabBarItems の配列が既に存在する場合、それぞれを通過し、すべてのプロパティをコピーします。必要に応じて破棄し、新しいプロパティを割り当ててから、古いプロパティを新しいプロパティにコピーします。

私はまだより良い解決策に目を光らせています (この方法には少しオーバーヘッドがあると思います) が、ありがたいことに、この段階では、iOS 3 のレガシー サポートはますます問題になりつつあります。:)

于 2011-06-09T01:33:34.020 に答える