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 5parentViewController中更改为,我们检查是否可用并使用它。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 回答