我正在对使用OS X v10.6中弃用的“addTimeInterval:”函数的现有库进行一些更改。我想使用预处理程序指令来抑制警告,以检查当前构建使用的SDK版本。像这样:
NSDate *newDate= nil;
#if OS X v10.6 (or newer)
newDate= [someOtherDate dateByAddingTimeInterval:60];
#else
newDate= [someOtherDate addTimeInterval:60];
#endif
这是否可以使用Xcode 4?
答案 0 :(得分:4)
从10.0开始,+[NSDate dateWithTimeIntervalSinceNow:]
怎么样?
也许不是进行编译时检查,而是可以进行运行时检查:
if ([[NSDate class] instancesRespondToSelector:@selector(dateByAddingTimeInterval:)]) {
newDate = [someOtherDate dateByAddingTimeInterval:60];
} else {
newDate = [someOtherDate addTimeInterval:60];
}
答案 1 :(得分:1)
#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说。
答案 2 :(得分:0)
您可以使用我在CLLocation getDistanceFrom: vs distanceFromLocation:
中描述的完全相同的技术 Juste将CLLocation
替换为NSDate
,将getDistanceFrom:
替换为addTimeInterval:
,将distanceFromLocation:
替换为dateByAddingTimeInterval:
,并且您将能够无论您使用的是什么SDK,无论您运行的操作系统版本是什么,都始终使用dateByAddingTimeInterval:
。