I am creating an application for personal use, and currently I am fixated on how to accurately get yesterday's steps from healthkit. And then from there, putting it in a variable (it should be easy, I know).
I have a HealthKitManager class that calls a function from within a view, and then adds it to a variable from the same view.
I looked through most healthKit questions and I am returning the data, but I do not think it is accurate data. My phone data from yesterday is 1442 steps, but it returns 2665 steps. Also, when I try to put data in a variable, it is output as 0.
HealthKitManagerClass
import Foundation
import HealthKit
class HealthKitManager {
let storage = HKHealthStore()
init()
{
checkAuthorization()
}
func checkAuthorization() -> Bool
{
var isEnabled = true
if HKHealthStore.isHealthDataAvailable()
{
let steps = NSSet(object: HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!)
storage.requestAuthorizationToShareTypes(nil, readTypes: steps as? Set<HKObjectType>) { (success, error) -> Void in
isEnabled = success
}
}
else
{
isEnabled = false
}
return isEnabled
}
func yesterdaySteps(completion: (Double, NSError?) -> ())
{
let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
let calendar = NSCalendar.currentCalendar()
let yesterday = calendar.dateByAddingUnit(.Day, value: -1, toDate: NSDate(), options: [])
let predicate = HKQuery.predicateForSamplesWithStartDate(yesterday, endDate: NSDate(), options: .None)
let query = HKSampleQuery(sampleType: type!, predicate: predicate, limit: 0, sortDescriptors: nil) { query, results, error in
var steps: Double = 0
if results?.count > 0
{
for result in results as! [HKQuantitySample]
{
steps += result.quantity.doubleValueForUnit(HKUnit.countUnit())
}
}
completion(steps, error)
print("\(steps) STEPS FROM HEALTH KIT")
Player.User.Gold.addSteps(Int(steps))
}
storage.executeQuery(query)
}}
ViewControllerClass
import UIKit
import Foundation
class UpdateViewController: UIViewController {
@IBOutlet var back: UIButton!
let HKM = HealthKitManager()
var stepsFromPhone = Double()
override func viewDidLoad() {
super.viewDidLoad()
back.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
HKM.yesterdaySteps(){ steps, error in
self.stepsFromPhone = steps
}
Player.User.Gold.addSteps(Int(stepsFromPhone))
print(Player.User.Gold.getSteps(), "IN PLAYER")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Exit from
print(Player.User.Gold.getSteps(), "IN PLAYER")
is an
0 IN PLAYER
Exit from
print("\(steps) STEPS FROM HEALTH KIT")
is an
2665.0 STEPS FROM HEALTH KIT
so basically my questions are:
- What do NSDate () do I need for everything yesterday?
- oldSteps() UpdateViewController?
!