18

このコードの何が問題になっていますか?

NSDate *matchDateCD = [[object valueForKey:@"matchDate"] description]; // from coredata NSDate
NSDate *add90Min = [matchDateCD dateByAddingTimeInterval:5400];



if ( matchDateCD >=[NSDate date] || add90Min <= matchDateCD )
{

    cell.imageView.image = [UIImage imageNamed: @"r.gif"];//Show image in the table

}    

試合が行われている場合、または 90 分間、テーブルにこの画像を表示する必要があります

4

5 に答える 5

41

objectあなたが何を呼んでいるのかわかりませんが、それがオブジェクトをvalueForKey:返すと仮定すると、への追加の呼び出しは(descriptionの戻り値)をに割り当てます。それはあなたがやりたいことではありません。NSDatedescriptionNSStringmatchDateCD

これはあなたがしたいことです:

NSDate *matchDateCD = [object valueForKey:@"matchDate"];
NSDate *add90Min = [matchDateCD dateByAddingTimeInterval:(90*60)]; // compiler will precompute this to be 5400, but indicating the breakdown is clearer

if ( [matchDateCD earlierDate:[NSDate date]] != matchDateCD ||
     [add90Min laterDate:matchDateCD] == add90Min )
{
    cell.imageView.image = [UIImage imageNamed: @"r.gif"];//Show image in the table
}
于 2012-06-13T19:37:38.900 に答える
10

NSDateのdateByAddingTimeIntervalメソッドを使用して、時間に秒数を追加します。

NSDate* newDate = [oldDate dateByAddingTimeInterval:90];

その後、NSDateFormatterまたはNSDateComponentsのいずれかを使用して、新しい時刻を再度取得できます。

于 2012-06-13T17:06:16.380 に答える
1

日付はオブジェクトであるため、ポインターを比較するのは適切ではありません。それらを共通の時間間隔(フロート)に変換します。

NSDate *now = [NSDate date];
NSDate *tenMinsLater = [now dateByAddingTimeInterval:600];

NSTimeInterval nowInterval = [now timeIntervalSinceReferenceDate];
NSTimeInterval *tenMinsLaterInterval = [tenMinsLater timeIntervalSinceReferenceDate];

if (nowInterval > tenMinsLaterInterval) NSLog(@"never get here");

または、コンパレータを使用します。

// also false under newtonian conditions
if (now > [now laterDate:tenMinsLater]) NSLog(@"einstein was right!");

またはearlyDateを使用します:または比較します:

于 2012-06-13T17:17:49.283 に答える