我是一位经验丰富的Unix C程序员,Objective C和OS X相对较新。我想确定NSDate是否为今天。我的方法是从一个很好的解决方案here复制:如何确定是否NSDate是今天
+ (BOOL) isToday:(NSDate *)aDate {
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:(NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:[NSDate date]];
NSDate *today = [cal dateFromComponents:components];
components = [cal components:(NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:aDate];
NSDate *otherDate = [cal dateFromComponents:components];
BOOL isToday = [today isEqualToDate:otherDate];
return isToday;
}
代码编译,但生成每个NSInteger的NSxxxCalendarUnit废弃警告。快速搜索将显示NSCalendarUnixxxx格式的更新常量。
如何使用新的常量?我试着更换行:
components = [cal components:(NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:aDate];
随着
components = [cal component:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:aDate];
,但我得到转换警告。我是否需要明确地施放此OR'd常量?新的常量是NSUInteger,NSCalendarUnit类型。 “组件:”参数似乎期待NSCalendarUnit,所以我不知道我缺少什么......
而且,是的,我知道iOS8和OS X 10.10包含新的日历功能(描述here),如isDateInToday :,但我正在寻找一个iOS 7兼容解决方案。
不过,我不保证,将在iOS的7上运行,因为我不知道什么时候像'NSCalendarUnitEra'这样的术语替换了像NSEraCalendarUnit这样的术语。如果不行,那么你只需要忍受弃用警告。 – matt
枚举元素名称的更改纯粹是编译时的事情。在iOS 7上运行时不会导致问题,因为这些值是相同的。 –
@KenThomases对,我在想可能会有问题,但一旦它编译为iOS 8,就iOS 7而言,这只是数字。感谢您指出了这一点! – matt