2011-08-02 5 views
1

デバイスモーションのタイムスタンププロパティをnslogします。Nslogタイムスタンプ

デバイスの動きがクラスCMMotionManager.devicemotion.timestamp

任意のアイデアです。

+0

タイムスタンプはどういう意味ですか? –

+0

CMMotionManager.devicemotionはCMDeviceMotionタイプで、そのクラスにはタイムスタンプのプロパティが含まれていませんか? –

+0

@Robin - CMLogItemから 'timestamp'を継承します。 –

答えて

5

timestampプロパティがNSTimeIntervalあるので、あなたが行うことができる必要があります:あなたの代わりに%@%fを使用し、直接それをログに記録できるよう

NSLog(@"Motion at time: %@", 
[NSDate dateWithTimeIntervalSinceReferenceDate:devicemotion.timestamp]); 

NSTimeIntervalは、単にtypedefさdoubleタイプです。

また、このタイムスタンプがアップルのリファレンス日付または標準の* nix日付に対して設定されているかどうかを示すものではありませんので、上記のメソッドが将来日付を返す場合は[NSDate dateWithTimeIntervalSince1970:]を使用する必要があります。

@davidbittonがCMDeviceMotiontimestampが最後のデバイスの起動を基準と示唆しているように、正しいNSDateこれは@davidbittonが正しいと仮定すると、おおよそ正確NSDateオブジェクトが得られるはず

NSDate *startupTime = [NSDate dateWithTimeIntervalSinceNow: 
          -1 * [[NSProcessInfo processInfo] systemUptime]]; 

NSDate *deviceMotionDate = [NSDate dateWithTimeInterval:devicemotion.timestamp 
               sinceDate:startupTime]; 

によって導出することができます。 (参照:NSProcessInfo -systemUptime

しかし、これはどのように複雑に与えられた、私は今あなたが

"... event logged at %0.2f seconds since startup...", devicemotion.timestamp 
+5

デバイスモーションサンプルのタイムスタンプが、デバイスが最後に起動されたときのNSTimeIntervalであるため、これは機能しません。 2001年1月1日または1970年の共通のエポックではありません。 – davidbitton

+0

@davidbitton + flaggers + downvoter: 'CMDeviceMotion.timestamp'プロパティが 'NSDate'であると仮定して(畳み込み?)更新されました。アップタイムに基づいています。 –

+0

これも機能しません。 - [NSProcessInfo systemUptime]は、CPUがスリープしている間はあなたに正しい値を与えません。 –

8
のようなものとして、書式文字列でそれをログに記録することを、 timestamp財産の性質を考えると、ことを簡単にするために示唆しています

日付はAppleの文書に従っているので、ここに入れた解決方法は

です。タイムスタンプは、電話機を起動してからの秒数です。

まず、最初のメッシュにoriginDateを保存します(NSDateがnilの場合)。私はこのような実際の日付にしたいとき

[self.motionManager startGyroUpdatesToQueue:self.queue withHandler:^(CMGyroData *gyroData, NSError *error) { 
    if (self.originDate == nil) { 
     self.originDate = [NSDate dateWithTimeIntervalSinceNow:-gyroData.timestamp]; 
    } 
}]; 

それから私は表示することができます。

[NSDate dateWithTimeInterval:mygyroData.timestamp sinceDate:self.originDate] 

はあなたには、いくつかのmesureを再起動する必要がある場合はnilにoriginDateをリセットすることを忘れないでください。

+0

@ ben-mosherのアプローチの多くのバリエーションを試した後、私はこのアプローチが一番良いと思います。実装するのはもう少し苦痛ですが、内部実装の詳細 - [NSProcessInfo systemUptime]に依存せず、より防御的な解決策です。 –

関連する問題