2017-07-06 6 views
0

J'essaye de rassembler des étapes de CMPedometer pendant 10 jours. Cela fonctionne bien pendant 7 jours mais renvoie 0 pour les trois derniers jours.Données de CMPedometer plus de 7 jours

Voici le code:

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)) 
        } 
       } 
      } 
     }) 
    } 
} 

Mais comme les jours augmentation depuis que je l'ai créé l'application, les données augmente pour une journée tous les jours. Cela fait 2 jours que j'ai créé l'application. Il a des données pour 9 jours et ainsi de suite. Comment puis-je m'attaquer à cela?

Veuillez meprésenter ce qui ne se passe pas.

Répondre

0

Tout va bien.

Selon la définition de la méthode de l'instance méthode queryPedometerData(from:to:withHandler:)

Seuls les sept derniers jours de données sont stockées et disponibles pour vous à récupérer. Si vous spécifiez une date de début supérieure à sept jours dans , le passé renvoie uniquement les données disponibles.

See Apple's Documentation here.