0

i have to print date on lable .The date is coming from database it show proper But problem is i have to compare database date with current date .If database date is smaller then current date then lable should print string @“Due”,otherwise print date like this:03/05/2012. this code which i am doing in my custom cell class i writen this code in method which i pass in controller class when i scroll my tableview then value is change where i am wrong please help me

- (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];
}


}

in my controller class .m // Customize the appearance of table view cells.

- (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 を漏らしています。1 つの日付を使用してNSDateFormatter2 つの日付をフォーマットできます。新しい日付を割り当てる必要はありません。

于 2012-05-03T08:39:13.017 に答える
0

比較では、のメモリアドレスがのメモリアドレスよりも小さい(duedate<=duedate1)かどうかを確認しています。これらは両方ともポインタタイプであるためです。これはおそらくあなたが本当に望んでいるものではありません:-)。代わりに次のようなものを試してください。duedateduedate1

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

NSDate オブジェクトを直接比較することができます。その事実は、あなたがしていることではなく、優れた迅速なアプローチになります。

于 2012-05-03T09:01:54.100 に答える
0

NSComparisonResult 結果 = [taskobject.DueDate 比較:[NSDate 日付]];

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