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対応でビルドし直してしまうと、動かなくなってしまうので注意しましょう。

 

Tags: , , ,