2011-08-02 8 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 유형입니다.

또한이 타임 스탬프가 Apple의 참조 날짜 또는 표준 * nix 날짜에 대해 설정되어 있는지 여부를 나타내지 않으므로 앞에서 설명한 방법으로 먼 날짜가 반환되는 경우 [NSDate dateWithTimeIntervalSince1970:]을 사용해야 할 수도 있습니다. @davidbitton가 CMDeviceMotiontimestamp 마지막 장치 부팅을 기준으로 제안 된 바와 같이

올바른 NSDate를 가정하면, 이것은 대략 정확한 NSDate 객체를 생성한다

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

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

의해 유도 될 수 @davidbitton 맞습니다 . (참조 : 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 설명서에 따라 나와 있기 때문에 여기에 넣은 해결책은 다음과 같습니다.

시간 스탬프는 전화 부팅 후 경과 된 시간입니다.

먼저 NSDate가 nil 인 경우 첫 번째 mesure에 originDate를 저장합니다. 나는이 같은 실제 일을 할 때

[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를 다시 시작해야하는 경우 무기 호에 originDate를 다시 설정하는 것을 잊지 마십시오.

+0

@ ben-mosher의 접근법에 대한 많은 변형을 시도한 후에이 방법이 가장 적합하다고 생각합니다. 구현하는 데에는 조금 더 고통 스럽지만 내부 구현 세부 사항은 [NSProcessInfo systemUptime]에 의존하지 않으므로보다 방어적인 솔루션입니다. –