Данные CMPpedometer более 7 дней

Я пытаюсь собрать шаги из CMPedometer в течение 10 дней. Он отлично работает в течение 7 дней, но возвращает 0 за последние три дня.

Вот код:

var days:[String] = []
var stepsTaken:[Int] = []
let activityManager = CMMotionActivityManager()
let pedoMeter = CMPedometer()

var cnt = 0

override func viewDidLoad() {
    super.viewDidLoad()
    getDataForLast10Days()
}

func getDataForLast10Days() {
    if(CMPedometer.isStepCountingAvailable()){
        let serialQueue : DispatchQueue  = DispatchQueue(label: "com.example.MyQueue", attributes: .concurrent)
        let formatter = DateFormatter()
        formatter.dateFormat = "d MMM"
        serialQueue.sync(execute: { () -> Void in
            let today = NSDate()
            for day in 1...10{
                let from = NSDate(timeIntervalSinceNow: Double(-7+day) ))
                let hour = Calendar.current.component(.hour, from: from as Date)
                let min = Calendar.current.component(.minute, from: from as Date)
                let sec = Calendar.current.component(.second, from: from as Date)
                let timeToSub = (hour * 60 + min) * 60 + sec
                let fromDate = NSDate(timeIntervalSinceNow: (Double(-10+day) * (86400 ) ) - Double(timeToSub))
                let toDate = NSDate(timeIntervalSinceNow: (Double(-10+day+1) * (86400) ) - Double(timeToSub))
                let dtStr = formatter.string(from: (toDate as Date))

                self.pedoMeter.queryPedometerData(from: fromDate as Date , to: toDate as Date) { (data : CMPedometerData!, error) -> Void in
                    //print("From Date: \(fromDate)","\n\n")
                    if(error == nil){
                        // print(data,"\n\n")
                        print("\(dtStr) : \(data.numberOfSteps)")
                        self.days.append(dtStr)
                        self.stepsTaken.append(Int(data.numberOfSteps))
                    }
                }
            }
        })
    }
}

Но по мере того, как количество дней с момента создания приложения увеличивается, данные за один день увеличиваются каждый день. Прошло 2 дня с момента создания приложения. В нем есть данные за 9 дней и так далее. Как мне справиться с этим?

Пожалуйста, дайте мне знать, что не так.


person S.Reddy    schedule 06.07.2017    source источник


Ответы (1)


Все в порядке.

Согласно определению метода экземпляра метода queryPedometerData(from:to:withHandler:)

Только данные за последние семь дней хранятся и доступны для извлечения. При указании даты начала, отстоящей более чем на семь дней назад, возвращаются только доступные данные.

см. документацию Apple здесь.

person Ryan Davis    schedule 25.07.2017
comment
Существуют ли другие источники данных о действиях пользователей? Мы можем получать тренировки из HealthKit, но это не совсем то, что предлагает CoreMotion... - person DoN1cK; 02.07.2021