8月 11
16
iOS5のparentViewControllerの挙動
iOS 5 betaでTaiatariの動作確認などやってますが、TaiatariHeroが動かなくなってしまいました。
バグなのか仕様変更なのか分からないけど、親のViewControllerを参照するparentViewControllerプロパティの挙動が変わった、というか使えなくなった。
iOS 4.xまでは親のViewControllerを取得する場合はしたのような感じで、parentに親のポインターが返ってきます。
HogeViewController *parent;
parent = (HogeViewController*)[self parentViewController];
同じことをiOS 5でやるとparentには親のポインターがとれずに0が返ってきます。
いっそ、エラーになればいいのに0が返ってくるので、後でparentを使おうとしたときに落ちたりします。
おかげで、落ちる原因が分かるまでに時間がかかりました。
どうも、iOS 5では親のViewControllerを取得するにはpresentingViewControllerというプロパティを使うようです。
ただ、iOS 4.xでもiOS 5でも両方で動くようにしたいので、どちらかに決め打ちは出来ません。
ということで、やむなく下のようなコードにしたら、両方で動くことを確認できました。
HogeViewController *parent;
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 5.0) {
parent = (HogeViewController*)[self parentViewController];
} else {
parent = (HogeViewController*)[self presentingViewController];
}
もっとスマートなやり方はあるんでしょうか?
ちなみに、以前のXcodeで既にビルド済みのアプリは、iOS 4.xでもiOS 5でも動くようです。
既にリリース済みのTaiatariHeroはiOS 5 betaでもちゃんと動きました。
同じプログラムをXcode 4.2でiOS 5対応でビルドし直してしまうと、動かなくなってしまうので注意しましょう。