ios – CMPedometerData中的endDate不正确

我用CMPedometer设计应用程序,有一个奇怪的问题.我有我的客户端的日志,我看这个CMPedometerData,我认为真的不正确,我不明白为什么这样

[2017-04-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>

正如你可以看到我的客户端(我不能重现这个错误)得到pedometerData从方法startPedometerUpdatesFromDate和endDate 2017-04-11 20:18:41比现在更大2017-04-11 20:16:34(它是第一个CMPedometerData之后startPedometerUpdatesFromDate在从后台返回后启动 – 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;
          ...
    }];
}

解决方法

我不认为这可以避免,因为这取决于太多的外部因素.

您可以做的是使用逻辑来过滤/排列数据,因为您知道收到的“现在”日期的任何数据实际上将在此之前,因此如果您只对步骤感兴趣或类似的事情,那么只需获得计数.

如果你真的对准确的时间和步骤感兴趣,那么我可以想到3个选择:

1)考虑时间偏移数据被破坏.

2)使用外部源(服务器)而不是设备时间的时间.

3)通过使用内部时钟进行复杂的时间管理:Is there a clock in iOS that can be used that cannot be changed by the user

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...