我用它来检查iOS版本,但它不起作用:
#ifndef kCFCoreFoundationVersionNumber_iPhoneOS_5_0
#define kCFCoreFoundationVersionNumber_iPhoneOS_5_0 675.000000
#endif
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0
#define IF_IOS5_OR_GREATER(...) \
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_5_0) \
{ \
__VA_ARGS__ \
}
#else
#define IF_IOS5_OR_GREATER 0
#endif
当我做
时#if IF_IOS5_OR_GREATER
NSLog(@"iOS5");
#endif
没有任何反应。这里有问题吗?
答案 0 :(得分:13)
更简单:
#define IS_IOS6_AND_UP ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0)
答案 1 :(得分:9)
#ifdef __IPHONE_5_0
等
只是寻找那个常数。所有目标c常量都以两个下划线开头
答案 2 :(得分:5)
定义此方法:
+(BOOL)iOS_5 {
NSString *osVersion = @"5.0";
NSString *currOsVersion = [[UIDevice currentDevice] systemVersion];
return [currOsVersion compare:osVersion options:NSNumericSearch] == NSOrderedAscending;
}
然后将宏定义为该方法。
答案 3 :(得分:5)
您已经定义了一个宏,但是您以非宏方式使用它。尝试这样的东西,使用相同的宏定义。
IF_IOS5_OR_GREATER(NSLog(@"iOS5");)
(这不是您的#if
/ #endif
阻止。)
答案 4 :(得分:2)
对于运行时检查,请使用以下内容:
- (BOOL)iOSVersionIsAtLeast:(NSString*)version {
NSComparisonResult result = [[[UIDevice currentDevice] systemVersion] compare:version options:NSNumericSearch];
return (result == NSOrderedDescending || result == NSOrderedSame);
}
如果你在UIDevice上为它创建一个类别,你可以这样使用它:
@implementation UIDevice (OSVersion)
- (BOOL)iOSVersionIsAtLeast:(NSString*)version {
NSComparisonResult result = [[self systemVersion] compare:version options:NSNumericSearch];
return (result == NSOrderedDescending || result == NSOrderedSame);
}
@end
...
if([[UIDevice currentDevice] iOSVersionIsAtLeast:@"6.0"]) self.navigationBar.shadowImage = [UIImage new];
答案 5 :(得分:1)
#define isIOS7 ([[[UIDevice currentDevice]systemVersion]floatValue] > 6.9) ?1 :0