仅在iOS< 6.0预处理?

时间:2013-03-21 07:52:07

标签: ios xcode

我可以找到很多关于如何编译/运行代码的例子,然后iOS版本是>什么,但我怎么做反过来呢?我在模拟器中运行iOS 5.0尝试了以下操作:

#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_6_0
// Code for iOS < 6.0 here
#endif

但是#if - #endif中的代码不能在模拟器中的iOS 5.0上运行。我怎么能这样做?

[编辑] 好的,所以我不确定我想要的是什么,对不起:)问题是我希望只有当设备运行iOS&lt;时才能运行我的UITableViewDelegate中的代码。 6.0:

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
}

这是因为我想在运行iOS&lt; 6,但在iOS 6上我可以更容易地做这个样式。但是在这个方法中运行时的版本检查实际上并不是我想要的,因为它已经很晚了。

谢谢你 索伦

2 个答案:

答案 0 :(得分:7)

之间存在差异
  1. 编译时检查您是否针对特定SDK和
  2. 进行编译
  3. 检查您的代码在哪个操作系统上运行
  4. 检查__IPHONE_6_0宏只会检查您正在编译的目标...是您想要的?如果是这样,您可以使用#ifndef __IPHONE_6_0来检查您是否未针对iOS 6进行编译

    如果您想知道运行代码的操作系统,可以查看MSK的answer

答案 1 :(得分:3)

这是运行时不编译时检查。

#define SYSTEM_VERSION_LESS_THAN(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

一样使用它

如果(SYSTEM_VERSION_LESS_THAN(@ “6.0”)) {

}