2014年09月09日

iOS5でWebViewのあるダイアログを閉じると落ちる問題

いまさら iOS5 の話題で恐縮ですが、現時点では AppStore で iOS5 用のアプリがダウンロードできることもあり、現在保守しているアプリが iOS5 対応となっている以上、いちおう動作確認をしておかないといけないと思うわけです。それで、iOS5 のときだけアプリが落ちるという現象が見つかりました。

現象としては、ダイアログに乗っている WebView をスクロールさせてダイアログを閉じると、再度ダイアログを開こうとしたときに EXC_BAD_ACCESS が発生して落ちてしまうというものです。

ゾンビオブジェクトを追跡できるようにして実行したところ、下記のようなログが残っていました。
-[UILayoutContainerView setUseFastMode:]: message sent to deallocated instance 0x10075920


ゾンビオブジェクトを追跡するための設定は、下記のサイトを参考にしました。
深淵へ - ゾンビオブジェクトを検出する (Xcode編) - Kazzzの日記
http://d.hatena.ne.jp/Kazzz/20120109/p1

得られた情報をもとにググってみると、下記のページが見つかりました。スクロールが動作しているときに閉じると落ちるようです。TableView でも似たような現象があるらしいので、ScrollView に関係するオブジェクトだと問題があるようです。

objective c - App crashes when Back button tapped while scrolling table view - Stack Overflow
http://stackoverflow.com/questions/10146660/app-crashes-when-back-button-tapped-while-scrolling-table-view

ダイアログが閉じる瞬間にスクロールが止まっていれば良いようなので、viewWillDisappear に下記のように記述したら落ちる問題は解消しました。
- (void)viewWillDisappear:(BOOL)animated
{
[self.webView.scrollView setContentOffset:self.webView.scrollView.contentOffset animated:NO];
}




posted by はるこち at 13:15| Comment(0) | TrackBack(0) | iOSアプリ開発 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。