2012-05-03 18 views
0

lableの日付を印刷する必要があります。日付がデータベースから正しく表示されます しかし、問題はデータベースの日付と現在の日付を比較することです。 lableは "Due"という文字列を出力します。それ以外の場合は、03/05/2012のように日付を印刷します。私は私のテーブルビューをスクロールするとき、私はコントローラクラスに渡し、私は私のカスタムセルクラスに行っています このコード私はこの方法では、このコードを書かれ、その値が、私は間違っているの変化である私にiphoneで再利用可能なセルを制御する方法

- (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) { 
[email protected]"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; 

} 

答えて

1

NSStringをこのように比較することはできません。あなたは日付を比較していません。 NSDateのドキュメントをご覧ください。 compareを探します。

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


あなたのコードもNSDateFormatter秒をリークしています。 1つのNSDateFormatterを使用して2つの日付をフォーマットすることができます。新しい日付を割り当てる必要はありません。

+1

ロッキーが「ARC」を使用している場合、彼は漏れていませんが、dateformatterを再利用することは良い考えです。 – rckoenes

+0

ssteinbergしかし、私のテーブルセルをスクロールするときに、私のセルが再利用されています。値は、期限が切れて、03/05/2012のように変更されます。 – Rocky

+0

あなたのセル管理はおそらく間違っています。 – ssteinberg

0

duedateのメモリアドレスが両方ともポインタ型であるため、duedate1のメモリアドレスより小さいかどうかを確認しています。これはあなたが本当に望むものではないでしょう:-)。この代わりのようなものを試してみてください:

if ([taskobject.DueDate timeIntervalSinceNow] <= 0) { 
    ... due 
} 
else { 
    ... not due 
} 
0

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

if(result>0) 
    DateLable[email protected]"Due"; 
else 
    DateLable.text=duedate; 
0

NSDateオブジェクトを直接比較することができます。これは、実際に行っている作業よりも優れた、迅速なアプローチになります。

関連する問題