2017-04-11 39 views
12

我使用CMPedometer設計應用程序,並且有一個奇怪的問題。我從我的客戶端登錄,我看這個CMPedometerData,想想真不正確的,我無法理解爲什麼會是這樣CMPedometerData中的結束日期不正確

[2017年4月11日20時16分34秒+0000] CMPedometerData,的startDate 2017- 04-11 20:16:32 +0000 endDate 2017-04-11 20:18:41 +0000 steps 3 distance 2.130000000004657 floorsAscended(null)floorsDescended(null)currentPace(null)currentCadence(null)averageActivePace 0>

正如你可以看到我的客戶(我不能再現這個錯誤)得到了方法startPedometerUpdatesFromDate和endDate 2017-04-11 20:18:41的計步器數據比現在更大2017-04-11 20:16:34(這是第一次開始後的CMPedometerDataPedometerUpdatesFromDate是lau nched從後臺返回後 - willEnterForeground方法)。也許有人已經遇到類似的問題?

我的代碼的一部分:

- (void)didEnterBackground { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [[Pedometer sharedInstance].motionActivityManager stopActivityUpdates]; 
     [[Pedometer sharedInstance].pedometer stopPedometerUpdates]; 
    }); 
} 

- (void)willEnterForeground { 
    NSDate *nowDate = [NSDate new]; 

    /* here is request to get historical data from lastDateUpdate (store in database) to now date */ 
    [[Pedometer sharedInstance] importDataFrom:lastDateUpdate endDate:nowDate completion:^{ 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       /* show info */ 
      }); 
     }];  

    dispatch_async(dispatch_get_main_queue(), ^{ 
      [self startUpdatingData:nowDate]; 
    }); 

    lastDateUpdate = nowDate; 
} 

- (void)startUpdatingData:(NSDate *)fromDate { 

    NSOperationQueue *activityQueue = [[NSOperationQueue alloc] init]; 
    [[Pedometer sharedInstance].motionActivityManager startActivityUpdatesToQueue:activityQueue withHandler:^(CMMotionActivity * _Nullable act) { 
      ... 
    }]; 

    [[Pedometer sharedInstance].pedometer startPedometerUpdatesFromDate:fromDate withHandler:^(CMPedometerData * _Nullable pedometerData1, NSError * _Nullable error) { 
      ... 
      NSLog(@"%@", pedometerData1); 
      ... 
      lastDateUpdate = pedometerData1.endDate; 
      ... 
    }]; 
} 
+1

我理解,這是因爲手機的的時間。如果我們在iPhone上使用自動時間,那麼一切都會好的,但如果我們在手機上設置日期,它將不會正確 – Nikita

+0

您的計步器定義是什麼?向我們展示代碼 – brianLikeApple

回答

0

我不認爲這是可以避免的,因爲它取決於太多的外部因素。

你可以做的是使用邏輯來過濾/排列數據,因爲你知道任何接收到「現在」日期更新的數據實際上會在現在之前,所以如果你只是在步驟或類似的東西感興趣,那麼只是得到點數。

如果你是在準確的時間和步驟真正感興趣的話,我能想到的3種選擇:

1)考慮時間偏移數據損壞。

2)從外部來源(服務器)使用時間而不是設備時間。

3)通過使用內部時鐘做一些複雜的時間同治爲指定的位置:Is there a clock in iOS that can be used that cannot be changed by the user