CMPedometer queryPedometerData()在存在步骤的情况下返回0个步骤

时间:2018-11-28 10:48:30

标签: ios swift pedometer

CMPedometer queryPedometerData()方法中似乎存在一个错误。该方法在某些结束时间返回0个步骤,但是时间戳大于或等于1秒的同一查询将返回正确的步骤数

例如

foo&

getStepsBetweenDates方法看起来像这样

self.getStepsBetweenDates(NSDate(timeIntervalSince1970: 1543392126) as Date, date2:  NSDate(timeIntervalSince1970: 1543393044) as Date) returns (Int) 1488

self.getStepsBetweenDates(NSDate(timeIntervalSince1970: 1543392126) as Date, date2:  NSDate(timeIntervalSince1970: 1543393045) as Date) returns (Int) 0

self.getStepsBetweenDates(NSDate(timeIntervalSince1970: 1543392126) as Date, date2:  NSDate(timeIntervalSince1970: 1543393046) as Date) returns (Int) 1488

1 个答案:

答案 0 :(得分:1)

queryPedometerData是一个异步调用

通常,您不想返回getStepsBetweenDates调用中的步骤,因为它是异步的。

如果您将var steps = 0更改为var steps = [some random int],则由于设置了比赛条件,很可能会找回该数字而不是0。

更理想的情况是将代码实现为闭包/回调或另一种异步处理形式。

例如:

self.pedometer.queryPedometerData(from: date1, to: date2) { (data, error) in
  // Do something here with data.numberOfSteps    
}

这是一篇关于Medium的关于异步代码的文章:

https://medium.com/ios-os-x-development/managing-async-code-in-swift-d7be44cae89f