2017-07-06 27 views
0

我試圖從CMPedometer收集10天的步驟。它可以正常工作7天,但在過去三天內返回0。超過7天的CMPedometer數據

下面是代碼:

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天的數據等等。我如何解決這個問題?

請讓我知道什麼是錯的。

回答

0

一切都很好。

根據該實例方法queryPedometerData(from:to:withHandler:)

只有過去七天的數據的方法定義存儲,併爲您提供 檢索。在 中指定一個超過七天的開始日期,過去只返回可用數據。

See Apple's Documentation here.