7

Minimal Deployment TargetiOS 5.0に設定されたアプリでiOS6の機能をどのようにサポートできますか?

たとえば、ユーザーがiOS 5を使用している場合は、iOS 5が表示さUIActionSheetれますが、ユーザーがiOS 6を使用している場合は、iOS 6では別UIActionSheetのものが表示されますか?これはどうやるんですか?Xcode 4.5を使用していて、iOS5で実行するアプリが必要です。

4

1 に答える 1

19

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を使用している場合はにフォールバックしたいと思うかもしれません。クラスが利用可能かどうかを確認する場合があります。その方法については、こちらをご覧ください。

于 2012-09-25T19:47:46.573 に答える