如何支持iOS 7和8的NSCalendar?

iOS 8为旧方法引入了一些新的值。 例如,创build一个日历就像这样:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

现在,日历标识已经改变了,我应​​该像这样创build对象:

 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 

事情是,编译器警告我,只有在NSGregorianCalendar不推荐使用的第一种情况。 但是,编译器并没有警告我关于iOS 7的NSCalendarIdentifierGregorian兼容性。
这是否意味着NSCalendarIdentifierGregorian在iOS 7下工作?
如果没有,根据操作系统的不同,使用日历标识符创build日历的最佳方法是什么? 每次检查操作系统版本似乎都很乏味。

谢谢。

您可以使用内置的__IPHONE_8_0macros,加上自定义定义。

您的自定义定义将简单地引用在Objective-C中定义的基础值。 由于这些是被广泛使用的便捷定义,我将它们粘贴到一个头文件中,并将其包含在我的PCH文件中(在Xcode 6中,您必须自己创build预编译头,并在您的构build设置中指向它) 。

当iOS 9发布时,您仍然可以在不更新的情况下使用__IPHONE_8_0 ,因为在iOS 8之后的所有版本中,它仍然会被定义。

在一个头文件(或预编译头 – project_name.pch)

 #ifdef __IPHONE_8_0 #define GregorianCalendar NSCalendarIdentifierGregorian #else #define GregorianCalendar NSGregorianCalendar #endif 

在你的实现文件中

 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:GregorianCalendar]; 

我知道你问过关于格里高利的具体情况,但是不pipe怎样,

 NSCalendar *calendar = [NSCalendar currentCalendar];