Skip to content

モーダルを閉じるとTabBarの元ビューが真っ黒になっている件(ほんとに解決)

2012年8月8日

何たるあほなことを…。

最初の記事に書いた
http://stackoverflow.com/questions/8073389/blank-screen-for-ios-5-tab-after-dismissing-modal-and-coming-back-from-backgroun

http://openradar.appspot.com/10529236

ここに、解決方法は載っていた…。

モーダルを閉じるときに画面が消えてしまっても、タブの移動をして戻ってくれば問題なく表示がされている。

だから閉じるときにむりやりタブを往復させればいいじゃんっていう解決法でした。

書くとこんな感じ

self.tabBarController.selectedIndex = 1;
self.tabBarController.selectedIndex = 0;
[self dismissModalViewControllerAnimated:YES];

閉じる前にタブを無理やり移動させてやる感じです。見た目には影響しません。

このサンプルプロジェクトでは、タブを呼び出すためにわざわざデリゲートを使用してる感じですけど、出しているビューからpresentingViewControllerでもTabが呼び出すことができるので、そちら側から操作しても問題ないです。

ちなみにこの事象、質問をすると「お前のメモリ管理能力が低いからだ」みたいなことを言われて凹んでたんですけど、そういうレベルの話じゃないみたい。

この条件で発生するバグのようなもののようなんですね。

実際modalを閉じた時にloadview viewdidload はすべて通るんです。そして、self.viewがあるかどうかlogを出すと、viewは普通に存在してるんですよ。

つまり、ビューはあるのに、表示がされていない、という状態になってるんです。

普通のメモリ管理云々だと、unloadされるとview=nilになるからそっから作りなおしてないんだろって話なんだけど、そうじゃない。

タブを使ったアプリを立てる→モーダル出す→モーダル出しっぱなしで別のアプリでメモリ警告を起こす→アプリに戻ってくる→モーダルを閉じる→画面が消える!

というこのフローで起きるものみたいなんです。

全く、このせいで1ヶ月頭悩ましたよ…。解決してよかった!

広告

From → iPhone開発

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。