私は以下の条件付きコードを使用しています、
特定のコードをios5.0および>ios5.0でのみ実行したい(つまり、ios5.0および5.1バージョンもサポートしたい)
しかし、以下の条件は機能していないようです。(現在、私の開発バージョンは5.1ですが、以下のスニペットは識別されていません。コントロールはそれに入りません。)
あなたの考えを教えてください
#ifdef __IPHONE_5_0_OR_LATER
私は以下の条件付きコードを使用しています、
特定のコードをios5.0および>ios5.0でのみ実行したい(つまり、ios5.0および5.1バージョンもサポートしたい)
しかし、以下の条件は機能していないようです。(現在、私の開発バージョンは5.1ですが、以下のスニペットは識別されていません。コントロールはそれに入りません。)
あなたの考えを教えてください
#ifdef __IPHONE_5_0_OR_LATER
#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 */
#ifdef
はコンパイル ディレクティブであるため、実行時ではなくコンパイル時に評価されます。
したがって、これをコードに追加すると、ターゲット SDK が#ifdef
. そのため、iOS 4 と 5 の両方でアプリをコンパイルし、5 つのメソッドのみを#ifdef io5
アプリに配置すると、メソッドが呼び出されるため、iOS 4 でクラッシュします。
何らかの方法が利用可能かどうかを確認したい場合は、次のようにする必要があります。
これは、モーダル ビュー コントローラーをその親から却下する例です。iOS 5 で にparentViewController
変更されたので、利用可能かどうかを確認して使用します。presentingViewController
presentingViewController
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;
}
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
}