CMPedometer queryPedometerData (), возвращающий 0 шагов, если шаги существуют - PullRequest
0 голосов
/ 28 ноября 2018

Кажется, есть ошибка в методе CMPedometer queryPedometerData ().Метод возвращает 0 шагов для определенного времени окончания, но тот же запрос с отметкой времени 1 секунда выше или ниже возвращает правильное количество шагов

, например,

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

getStepsBetweenDates метод выглядит следующим образом

func getStepsBetweenDates(_ date1: Date, date2: Date) -> Int{

    let group = DispatchGroup()
    group.enter()

    var steps = 0

    self.pedometer.queryPedometerData(from: date1, to: date2, withHandler: {
      pData, error in
      if let e = error{
          print("Error querying pedometer", e.localizedDescription)
      }else{
        if let data = pData{
          steps = Int(data.numberOfSteps)
        }
        group.leave()
      }
    })

    _ = group.wait(timeout: DispatchTime.distantFuture)
    return steps

  }

1 Ответ

0 голосов
/ 15 февраля 2019

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

...