2015-04-08 59 views
-1

我是一位经验丰富的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兼容解决方案。

回答

2

问题是,您已将components:参数的名称写为component:。这些不是一回事,就像你应该知道,如果你是一个“有经验的C程序员” - 就像两个变量thingthings不一样。

如果你纠正错误,然后根据需要更改组件名称现代化会编得很好,没有任何警告:

+ (BOOL) isToday:(NSDate *)aDate { 
    NSCalendar *cal = [NSCalendar currentCalendar]; 
    NSDateComponents *components = [cal components:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:[NSDate date]]; 
    NSDate *today = [cal dateFromComponents:components]; 
    components = [cal components:(NSCalendarUnitEra|NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:aDate]; 
    NSDate *otherDate = [cal dateFromComponents:components]; 
    BOOL isToday = [today isEqualToDate:otherDate]; 
    return isToday; 
} 
+0

不过,我不保证,将在iOS的7上运行,因为我不知道什么时候像'NSCalendarUnitEra'这样的术语替换了像NSEraCalendarUnit这样的术语。如果不行,那么你只需要忍受弃用警告。 – matt

+0

枚举元素名称的更改纯粹是编译时的事情。在iOS 7上运行时不会导致问题,因为这些值是相同的。 –

+0

@KenThomases对,我在想可能会有问题,但一旦它编译为iOS 8,就iOS 7而言,这只是数字。感谢您指出了这一点! – matt

相关问题