iOS 8 为旧方法引入了一些新值。 例如,创建一个日历曾经是这样的:
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
现在,日历标识符已更改,我应该像这样创建对象:
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
问题是,编译器仅在第一种情况下警告我 NSGregorianCalendar 已被弃用。但是,编译器根本没有警告我 NSCalendarIdentifierGregorian 与 iOS 7 的兼容性。
这是否意味着 NSCalendarIdentifierGregorian 也可以在 iOS 7 下工作?
如果没有,根据操作系统创建带有日历标识符的日历的最佳方法是什么?每次检查操作系统版本似乎很乏味。
谢谢。
最佳答案
您可以使用内置的 __IPHONE_8_0
宏以及自定义定义。
您的自定义定义将仅引用 Objective-C 中定义的基础值。由于这些是广泛使用的便利定义,我将它们粘贴到头文件中,并将其包含在我的 PCH 文件中(在 Xcode 6 中,您必须自己创建预编译器头文件,并在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];
关于ios - 如何同时支持 iOS 7 和 8 的 NSCalendar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626823/