2011-01-19 9 views
1

私が取り組んでいるアプリケーションのキャッシングシステムを書いています。コアデータにキー(NSString)と最後に要求されたタイムスタンプ(NSDate)が格納されています。期限切れかどうかを調べるのに問題があります(300秒後に期限切れになる)。ランダムな値を返すNSTimeInterval

NSTimeInterval interval = [lastRequested timeIntervalSinceNow]; 
NSLog(@"Interval: %d", interval); 
// reload every 5 minutes 
if (interval > 300) { 
    NSLog(@"Last Requested: %d (older than 5 minutes)", interval); 
    return YES; 
} else { 
    NSLog(@"Last Requested: %d (within 5 minutes)", interval); 
    return NO; 
} 

私はlastRequestedが変更されていないことを確認しました。これは問題ありません。あなたが見ることができるようにアプリの真ん中の実行で、値が300を超えるかどうかをチェックする際に、奇妙

2011-01-19 11:31:03.770 App[2998:207] Interval: -830996480 
2011-01-19 11:31:03.770 App[2998:207] Last Requested: -830996480 (within 5 minutes) 
2011-01-19 11:30:57.634 App[2994:207] Interval: 1494482944 
2011-01-19 11:30:57.634 App[2994:207] Last Requested: 1494482944 (within 5 minutes) 
2011-01-19 11:30:51.219 App[2991:207] Interval: -1951399936 
2011-01-19 11:30:51.219 App[2991:207] Last Requested: -1951399936 (within 5 minutes) 

そして - まだそれがたとえ300未満だ考えている。しかし、間隔は一見ランダムな番号を生成しますそれは1494482944です。

アイデア?ありがとう。

答えて

4

間隔を記録すると、整数(%d)として記録されますが、時間間隔は2倍(%f)です。あなたのNSLog(...)のインスタンスを置き換えると、正しい値が表示されます。

+0

ああ、愚かな質問を申し訳ありません - 私はちょうど書くことができるRuby(とRails)に慣れています:もしlast_requested <5minutes.ago –

+0

まあ、NSTimeIntervalがdoubleと%dはおそらく整数より2倍の意味があると思いますが、これは愚かな疑問だと思っています:-) – Alfonso

+0

Xcodeの新しいLLVMコンパイラにはprintfのようなフォーマット文字列の組み込み型チェックがありますNSLog()やstringWithFormatのようなものです:) – Alfonso

関連する問題