Xcode-预处理程序指令检查正在使用哪个SDK

问题描述

| 我正在对使用\“ addTimeInterval:\”函数的现有库进行一些更改,该函数在OS X v10.6中已弃用。我想使用预处理指令禁止警告,以检查当前内部版本使用的SDK版本。像这样:
NSDate *newDate= nil;

#if OS X v10.6 (or newer)
newDate= [someOtherDate dateByAddingTimeInterval:60];
#else
newDate= [someOtherDate addTimeInterval:60];
#endif
使用Xcode 4完全可以吗?     

解决方法

自10.0以来一直存在的ѭ1怎么样? 也许不用进行编译时检查,而可以进行运行时检查:
if ([[NSDate class] instancesRespondToSelector:@selector(dateByAddingTimeInterval:)]) {
  newDate = [someOtherDate dateByAddingTimeInterval:60];
} else {
  newDate = [someOtherDate addTimeInterval:60];
}
    ,
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
    newDate = [someOtherDate dateByAddingTimeInterval:60];
#else
    newDate = [someOtherDate addTimeInterval:60];
#endif
但是,如果您使用10.6 SDK进行构建,则它不适用于10.5。需要像@Dave所说的运行时检查。     ,您可以使用我在CLLocation getDistanceFrom:vs distanceFromLocation中描述的完全相同的技术: 只需在说明中将
CLLocation
替换为
NSDate
,将
getDistanceFrom:
替换为
addTimeInterval:
,将
distanceFromLocation:
替换为
dateByAddingTimeInterval:
,无论您使用的是哪个SDK,无论运行的是哪个OS版本,都可以始终使用
dateByAddingTimeInterval:
。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...