0

アプリを iOS6 の MKDirectionsRequest (乗換案内メソッド) に対応させたいと考えています。Apple は、これを行う最善の方法は次のように述べています。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([MKDirectionsRequest isDirectionsRequestURL:url]){
        }
}

ただし、アプリが iOS5 ではなく iOS6 で実行されている場合にのみ、このコードが実行されるようにする最善の方法は何ですか? アプリはiOS5にも対応しているはずですが、私MKDirectionsRequestはiOS6です。

次のようなコンパイラ ディレクティブは使用できません。

#ifdefine iOS5

または何でも。

これが最善の方法ですか?

BOOL atLeastIOS6 = [[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0;

その後:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {

        if (atLeastIOS6)
        {
            if ([MKDirectionsRequest isDirectionsRequestURL:url]){
            }
        }
    }

openURL をチェックするときに iOS5 でクラッシュしないようにしたいだけです。

4

3 に答える 3

4

iOS のバージョンに依存しないでください。NSClassFromString を使用して、クラスが存在するかどうかを確認します。

Class directionsRequestClass = NSClassFromString(@"MKDirectionsRequest");

if (directionsRequestClass)
    // it exists, so you can use it
else
    // doesn't exist, do something else
于 2012-10-01T21:43:04.137 に答える
2

クラス MKDirectionsRequest が利用可能かどうかをテストできます。

if ([MKDirectionsRequest class]) { 
 ... 
}
于 2012-10-01T20:54:52.273 に答える
1

システム バージョン文字列の使用を思いとどまらせる投稿を数多く見てきました。6.0.1 を float に変換するのが難しいことに関係しているかもしれませんが、よくわかりません。

推奨される方法は、特定のバージョンに登場したセレクターをテストすることです。そのため、これら 2 つの方法を使用して、それぞれ iOS 5 または 6 をテストします。

+ (BOOL)isOS5Capable {

    return ( [UINavigationBar respondsToSelector:@selector(appearance)] );

}

+ (BOOL)isOS6Capable {

    return ( [UIView respondsToSelector:@selector(requiresConstraintBasedLayout)] );

}

Apple フレームワークのヘッダーを調べると、セレクターが表示されたバージョンを指定する NS_AVAILABLE マクロがかなりあることがわかります。iOS 6 用にこの関数を作成するために、チェックを簡素化するための静的メソッドを見つけるために数分間探し回りました (そのため、クラスを割り当てる必要はありません)。このプラクティスに従うことで、将来の更新に対してアプリのバージョン セーフを確保できるはずです。

于 2012-10-01T20:31:24.763 に答える