2012-04-03 8 views
3

私はこの文書の例を理解していません。timeIntervalSinceNowメソッドは正の値を示すはずですが、コードで述べたように「5」に達するにはどうしたらいいですか? (私はそれがどちらかだと思う0多かれ少なかれ、または-10、-20、-30等...しかし、我々は正の値など5として取得できますか?):あなたの助け'timeIntervalSinceNow'を負の値(CLLocationの例)で計算していますか?

ため

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    // test the age of the location measurement to determine if the measurement is cached 
    // in most cases you will not want to rely on cached measurements 
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow]; 
    if (locationAge > 5.0) return; 

感謝をtimeIntervalSinceNowについて言っているかNSDateドキュメントです

答えて

9

timeIntervalSinceNowコールの結果が負の場合(つまり、タイムスタンプが過去のものである(この場合は常にそうです))、正の数に変換されます。たとえば-2.5+2.5になります(またその逆もあります)。

次に、逆符号値をテストして、5.0より大きいかどうかを確認します。この場合、タイムスタンプは5秒以上前の値です。そうであれば、ロケーションデータは何もしません。なぜなら、これは古すぎて役に立たないからです。個人的に、私はテストで負の数を使用して、符号反転せずにこれを書かれているだろう

if([[newLocation timestamp] timeIntervalSinceNow] < -5.0) return; 
+0

IuliusCæsarさん、ありがとうございます。キャッシュされた場所ではなく、新しい場所を常に送信するように強制する方法はありますか? (値がキャッシュされている場合にアプリケーションが何もしないだけでなく、キャッシュされた値を持っている場合は、cllocationを再起動します) – Paul

+0

できません。それはできるだけ早くあなたに新しいものを送ります。あなたはそれを待つことができます。 –

+0

ありがとう、私はデフォルトでキャッシュの時間量を見つけることができません?あなたはそれについて何か知っていますか? – Paul

3

受信機と、現在の日付と時刻の間隔。レシーバが現在の日付と時刻より前の場合、戻り値は負の値になります。

この場合、タイムスタンプは過去に記録されており、常に「今」よりも前になります。一方、timeIntervalSince1970を使用すると、結果は肯定的になります。

+0

はルカシュありがとうございました! – Paul

関連する問題