【问题标题】:If statement being temperamental如果语句是喜怒无常的
【发布时间】:2011-06-16 18:02:17
【问题描述】:

我不确定,但有时我的 if 语句会失败,并在不应该出现的情况下显示错误的内容 有什么想法吗?

-(void)updateLabel{



   if (today > Date) {



    [only setHidden:YES];
    [untilRelease setHidden:YES];
    [theLabel setText:@"IS OUT"];


} else {


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

    int units = NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    NSDateComponents *components = [calendar components:units fromDate:[NSDate date] toDate:Date options:0];

    [theLabel setText:[NSString stringWithFormat:@"%d %@, %d %@ \n %d %@, %d %@ %d %@", [components month], @"Months", [components day], @"Days", [components hour], @"Hours", [components minute], @"Minutes and", [components second], @"Seconds"]];


}}

我已将今天定义为 [NSDate date] 并且 Date 是一个纪元数。

任何帮助都会很棒

【问题讨论】:

  • 只是一个疯狂的想法,但请检查“今天”是否未发布。将“今天”变量替换为 [NSDate 日期]——每次获取一个新变量——看看是否有效。
  • 是的...这样做...奇怪的是有时它认为 NSDate 日期已过 Date 而不是:'(
  • 我的apple > orange 声明有时不正确......

标签: ios xcode calendar if-statement nsdate


【解决方案1】:

因为它们都是 NSDate 实例,所以这样做,

NSComparisonResult result = [today compare:Date];
if ( result == NSOrderedDescending ){ //  today > Date
    // After Date
} else {
    // Before Date
}

原答案

如果today[NSDate date] 并且Date 是一个纪元数,那么您将它们进行了错误的比较。在比较它们之前,您也应该将today 转换为纪元数。

long currentTime = [today timeIntervalSince1970];
if ( currentTime > Date ) {
    // After `Date`
} else {
    // Before `Date`
}

【讨论】:

  • 日期 = [NSDate dateWithTimeIntervalSince1970:1316476800];我不知道发生了什么:(但我用这个作为参考日期;)欢呼迪帕克,你就是那个人! *还是不行!!
  • @myles 如果它们都是NSDate 实例,则遵循第二种方法。
  • M8 你太棒了,它完美地工作!想用另一个应用程序帮助我吗?? ;)
猜你喜欢
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2020-08-10
  • 2020-10-23
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多