如何支持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_0
macros,加上自定义定义。
您的自定义定义将简单地引用在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];