GoogleマップをロードしているUIWebViewを含むビューがあります(たくさんのjavascriptなど)。私が持っている問題は、Webビューの読み込みが完了する前にユーザーがナビゲーションバーの「戻る」ボタンを押すと、Webビューに読み込みを停止してから解放する方法をわかりやすく伝えることができないということです割り当て解除されたインスタンスに送信されたメッセージ私はまた、Webビューが完了する前にそのコンテナの表示が消えているのを確信していません(しかし、ユーザーがロードされる前に戻るボタンを押した場合は選択肢がありません)。viewWillDisappearでUIWebViewを安全にシャットダウンする方法は?
私はこの を持っている私のviewWillDisappearハンドラでmap.delegate=nil;
[self.map stopLoading];
デリゲートをnil'ingすると、それは私のビューコントローラにdidFailLoadWithErrorの送信を停止しますので、これは、OKほとんどのケースを扱うようです。しかし、私のビューのdeallocメソッドでWebビューを解放すると、時々(間欠的に)、解放されたインスタンスにメッセージが送られます。実際のページで実行されているjavascriptに関連しているようです(例:
-[UIWebView webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]: message sent to deallocated instance 0x4469ee0
私は単にwebviewを公開しないと、私はこれらのメッセージを受け取っていませんが、私はwebviewを漏洩していると思います。
私は「stopLoading」メッセージを送信し、単にviewWillDisappear内のWebViewをリリース、その後、私はこのようなメッセージが表示されない場合:
/SourceCache/WebCore/WebCore-351.9.42/wak/WKWindow.c:250 WKWindowIsSuspendedWindow: NULL window.
おそらく関連を、私は時々(再び完全に断続的に)を取得醜いheisenbugどこの他のビューのnavbarで戻るボタンをクリックするとタイトルが表示されますが、ビューは表示されません。言い換えれば、スタック上にビューnのタイトルが残っていますが、表示されているビューはまだn + 1ビューです(この結果、この画面にトラップされてルートビューに戻ることはできません。つまり、より多くのビューをプッシュして、正しく表示されなかったビューにポップバックします。ルートビューには表示されません。アプリを終了するには唯一の方法です)。他の時には、同じビュー上のプッシュとポップの同じシーケンスが正常に機能します。
この特定の1つは私をナットに追いやっています。 Webビューがロードされる前に消えていくビューに関連している可能性があります。つまり、このケースでは、メモリ上で不安定になり、ビュースタックを混乱させる可能性があります。あるいは、これは完全に無関係かもしれず、どこか別のバグかもしれません(私はデバッグビルドモードでこれを再現できませんでした。リリースビルドの設定ではgdbで見ることができません:-)。私のデバッグの実行から、私は何も公開していないとは思わない。そして、ある時点で私がWebビューを持っているビューに当たったときに、それを引き起こすことができるように思えるだけで、その直後には発生しません。
私があなたの場合は、Appleにバグを報告します。 Webビューは、割り当てが解除された後でメッセージを受け取るべきではありません.DeallocされたときにJS処理とURL読み込みを終了する必要があります。私はnavアイテムの問題を時々見たことがあるが、iPhone OS 3.0ベータ版をインストールした後でしかない。多分それはOSのバグでしょうか? –
それは私が思ったことです(deallocはきれいにすべきです)。リンゴのドキュメントは、彼らが提供するオブジェクトとの契約では一般的にはあまり明確ではありません。私は前にナビのことを見たことがないし、私はそれが私がやっている必要があります - 私はそれを修正することができればうまくいけばこのwebview事に関連していると思う私のプログラムで十分に定期的に発生します。 – frankodwyer
ohと追加するには、これが2.2.1で発生します – frankodwyer