Minimal Deployment Target
iOS 5.0に設定されたアプリでiOS6の機能をどのようにサポートできますか?
たとえば、ユーザーがiOS 5を使用している場合は、iOS 5が表示さUIActionSheet
れますが、ユーザーがiOS 6を使用している場合は、iOS 6では別UIActionSheet
のものが表示されますか?これはどうやるんですか?Xcode 4.5を使用していて、iOS5で実行するアプリが必要です。
Minimal Deployment Target
iOS 5.0に設定されたアプリでiOS6の機能をどのようにサポートできますか?
たとえば、ユーザーがiOS 5を使用している場合は、iOS 5が表示さUIActionSheet
れますが、ユーザーがiOS 6を使用している場合は、iOS 6では別UIActionSheet
のものが表示されますか?これはどうやるんですか?Xcode 4.5を使用していて、iOS5で実行するアプリが必要です。
iOSバージョンではなく、利用可能なメソッド/機能を検出し、メソッドが利用可能であると想定することを常に優先する必要があります。
Appleのドキュメントを参照してください。
たとえば、iOS 5でモーダルビューコントローラを表示するには、次のようにします。
[self presentModalViewController:viewController animated:YES];
iOS 6では、のpresentModalViewController:animated:
方法UIViewController
は非推奨です。iOS6で使用する必要presentViewController:animated:completion:
がありますが、いつ何を使用するかをどのようにして知ることができますか?
iOSのバージョンを検出し、前者と後者のどちらを使用するかをifステートメントで指示することもできますが、これは壊れやすいため、間違いを犯します。将来、新しいOSでこれを行う新しい方法が提供される可能性があります。
これを処理する正しい方法は次のとおりです。
if([self respondsToSelector:@selector(presentViewController:animated:completion:)])
[self presentViewController:viewController animated:YES completion:^{/* done */}];
else
[self presentModalViewController:viewController animated:YES];
もっと厳しくして、次のようなことをするべきだと主張することもできます。
if([self respondsToSelector:@selector(presentViewController:animated:completion:)])
[self presentViewController:viewController animated:YES completion:^{/* done */}];
else if([self respondsToSelector:@selector(presentViewController:animated:)])
[self presentModalViewController:viewController animated:YES];
else
NSLog(@"Oooops, what system is this !!! - should never see this !");
UIActionSheet
これがiOS5と6で同じであると私が知っている限り、あなたの例についてはわかりません。おそらくあなたはUIActivityViewController
共有を考えUIActionSheet
ていて、iOS5を使用している場合はにフォールバックしたいと思うかもしれません。クラスが利用可能かどうかを確認する場合があります。その方法については、こちらをご覧ください。