1

私は以下の条件付きコードを使用しています、

特定のコードをios5.0および>ios5.0でのみ実行したい(つまり、ios5.0および5.1バージョンもサポートしたい)

しかし、以下の条件は機能していないようです。(現在、私の開発バージョンは5.1ですが、以下のスニペットは識別されていません。コントロールはそれに入りません。)

あなたの考えを教えてください

#ifdef __IPHONE_5_0_OR_LATER
4

3 に答える 3

4
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0
// iPhone 5.0 code here
#endif


#define __IPHONE_2_0     20000
#define __IPHONE_2_1     20100
#define __IPHONE_2_2     20200
#define __IPHONE_3_0     30000
#define __IPHONE_3_1     30100
#define __IPHONE_3_2     30200
#define __IPHONE_4_0     40000
#define __IPHONE_4_1     40100
#define __IPHONE_4_2     40200
#define __IPHONE_4_3     40300
#define __IPHONE_5_0     50000
#define __IPHONE_5_1     50100
#define __IPHONE_NA      99999  /* not available */

特定の iPhone バージョンをターゲットにする方法

于 2012-05-25T08:36:36.790 に答える
2

#ifdefはコンパイル ディレクティブであるため、実行時ではなくコンパイル時に評価されます。

したがって、これをコードに追加すると、ターゲット SDK が#ifdef. そのため、iOS 4 と 5 の両方でアプリをコンパイルし、5 つのメソッドのみを#ifdef io5アプリに配置すると、メソッドが呼び出されるため、iOS 4 でクラッシュします。

何らかの方法が利用可能かどうかを確認したい場合は、次のようにする必要があります。

これは、モーダル ビュー コントローラーをその親から却下する例です。iOS 5 で にparentViewController変更されたので、利用可能かどうかを確認して使用します。presentingViewControllerpresentingViewController

if ([self respondsToSelector:@selector(presentingViewController)]) {
    [self.presentingViewController dismissModalViewControllerAnimated:YES];
} else {
    [self.parentViewController dismissModalViewControllerAnimated:YES];
}

クラスが利用可能かどうかを確認する場合も同様です。

if ([MPNowPlayingInfoCenter class]) {
     MPNowPlayingInfoCenter *center = [MPNowPlayingInfoCenter defaultCenter];
     NSDictionary *songInfo = /* ... snip ... */;
    center.nowPlayingInfo = songInfo;
}
于 2012-05-25T08:36:52.030 に答える
0
NSArray *versionCompatibility = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];

if ( 5 == [[versionCompatibility objectAtIndex:0] intValue] ) { /// iOS5 is installed

    // Put iOS-5 code here

} else { /// iOS4 is installed

    // Put iOS-4 code here         

}
于 2012-05-25T10:25:44.050 に答える