0

我必须在标签上打印日期。日期来自数据库,它显示正确但问题是我必须将数据库日期与当前日期进行比较。如果数据库日期小于当前日期,那么标签应该打印字符串@“到期”,否则打印像这样的日期:03/05/2012。我在我的自定义单元类中执行的这段代码我在我滚动表格视图时传入控制器类的方法中编写了这段代码然后值改变了我错的地方请帮助我

- (void) updateContent: (Tasksmodal*) taskobject{
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"dd/MM/yyyy"];

        NSString* duedate = [dateFormat stringFromDate:taskobject.DueDate];


        NSDate *currentdate;
        currentdate=[NSDate date];
        //NSDateFormatter *dateFormat1 = [[NSDateFormatter alloc] init];
        //[dateFormat1 setDateFormat:@"dd/MM/yyyy"];
        NSString* duedate1 = [dateFormat stringFromDate:currentdate];



  if ([currentdate compare:taskobject.DueDate]!=NSOrderedDescending) {
DateLable.text=@"Due";
DateLable.textColor=[UIColor redColor];

}

else{
    DateLable.text=duedate;
    DateLable.textColor=[UIColor blackColor];
}


}

在我的控制器类中 .m // 自定义表格视图单元格的外观。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    TasksList * cell =(TasksList*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[TasksList alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    }
    //[[[cell contentView] subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)]; 
    taskobject=(Tasksmodal*)[self.lstTasks objectAtIndex:indexPath.row];    
    [cell updateContent:taskobject];

return cell;

}
4

4 回答 4

1

你不能这样比较NSString。你不是在比较日期。查看NSDate文档。寻找compare

    if ([currentdate compare:taskobject.DueDate]!=NSOrderedDescending) {
        DateLable.text=@"Due";
        DateLable.textColor=[UIColor redColor];
    }
    else{
        DateLable.text=duedate;
        DateLable.textColor=[UIColor blackColor];
    }


您的代码也泄漏了NSDateFormatters. 您可以使用单个NSDateFormatter来格式化 2 个日期,无需分配新的日期。

于 2012-05-03T08:39:13.017 回答
0

您可以直接比较 NSDate 对象,这实际上将是一种很好且快速的方法,而不是您正在做的事情。

于 2012-05-03T09:01:54.100 回答
0

您的比较(duedate<=duedate1)是检查内存地址duedate是否小于内存地址,duedate1因为它们都是指针类型。这可能不是您真正想要的:-)。尝试这样的事情:

if ([taskobject.DueDate timeIntervalSinceNow] <= 0) {
    ... due
}
else {
    ... not due
}
于 2012-05-03T08:43:36.227 回答
0

NSComparisonResult 结果 = [taskobject.DueDate 比较:[NSDate 日期]];

if(result>0)
    DateLable.text=@"Due";
else
   DateLable.text=duedate;
于 2012-05-03T08:56:14.770 回答