2016-05-14 25 views
0

Ich weiß, dass diese Frage gestellt wurde, aber nicht wirklich beantwortet wurde. Ich habe Dinge aus Themen wie folgt probiert: Heart Rate With Apple's HealthkitWie lese ich healthKit Herzfrequenzdaten?

Ich versuchte, dies von Objective-C zu Swift, aber nicht funktioniert.

Meine Frage ist, was ist der beste Weg, um Herzfrequenzdaten aus Health-Kit zu lesen. Ich möchte in der Lage sein, jede Herzfrequenzmessung von dem Zeitpunkt an zu lesen, an dem sie aufgenommen wurde, und ich möchte die Zeitstempel dieser Messungen sehen können.

ich um die Erlaubnis gebeten, hier:

import Foundation 
import UIKit 
import HealthKit 

class HealthKitManager: NSObject { 

static let healthKitStore = HKHealthStore() 

static func authorizeHealthKit() { 

    let healthKitTypes: Set = [ 
     HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!, 
    ] 

    healthKitStore.requestAuthorizationToShareTypes(healthKitTypes, 
                readTypes: healthKitTypes) { _, _ in } 
    } 
} 

Hier ist der Code meiner Ansicht Controller für jetzt (ich bin nicht sicher, warum dies nicht funktioniert):

import UIKit 
import HealthKit 

class ViewController: UIViewController { 

let health: HKHealthStore = HKHealthStore() 
let heartRateUnit:HKUnit = HKUnit(fromString: "count/min") 
let heartRateType:HKQuantityType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)! 
var heartRateQuery:HKQuery? 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

    @IBAction func authorizeTapped(sender: AnyObject) { 
    print("button tapped") 
    self.createStreamingQuery() 
    HealthKitManager.authorizeHealthKit() 

} 


func createStreamingQuery() -> HKQuery 
{ 
    let queryPredicate = HKQuery.predicateForSamplesWithStartDate(NSDate(), endDate: nil, options: .None) 

    let query:HKAnchoredObjectQuery = HKAnchoredObjectQuery(type: self.heartRateType, predicate: queryPredicate, anchor: nil, limit: Int(HKObjectQueryNoLimit)) 
    { (query:HKAnchoredObjectQuery, samples:[HKSample]?, deletedObjects:[HKDeletedObject]?, anchor:HKQueryAnchor?, error:NSError?) -> Void in 

     if let errorFound:NSError = error 
     { 
      print("query error: \(errorFound.localizedDescription)") 
     } 
     else 
     { 
      //printing heart rate 
      if let samples = samples as? [HKQuantitySample] 
      { 
       if let quantity = samples.last?.quantity 
       { 
        print("\(quantity.doubleValueForUnit(self.heartRateUnit))") 
       } 
      } 
     } 
    } 

    query.updateHandler = 
     { (query:HKAnchoredObjectQuery, samples:[HKSample]?, deletedObjects:[HKDeletedObject]?, anchor:HKQueryAnchor?, error:NSError?) -> Void in 

      if let errorFound:NSError = error 
      { 
       print("query-handler error : \(errorFound.localizedDescription)") 
      } 
      else 
      { 
       //printing heart rate 
       if let samples = samples as? [HKQuantitySample] 
       { 
        if let quantity = samples.last?.quantity 
        { 
         print("\(quantity.doubleValueForUnit(self.heartRateUnit))") 
        } 
       } 
      }//eo-non_error 
    }//eo-query-handler 

    return query 
} 


} 

Ich kann nicht alles auf die Konsole zu drucken, das ist wirklich genau das, was ich will.

Auch - nichts von diesem Code geht in Richtung Hausaufgaben, persönliche/professionelle Projekte ... etc. Es ist nur zum Spaß/zu lernen, und der größte Teil dieses Codes ist, was ich versucht habe und was ich gefunden habe, durch mehrere Stapel über den Fluss und andere Foren zu suchen.

+0

Haben Sie jemals Ihre 'createStreamingQuery' Funktion ausgeführt? – jtbandes

+0

Ich tat, und nichts wurde auf der Konsole gedruckt, nicht sicher warum. – dnaland

+0

Haben Sie executeQuery für den Integritätsspeicher verwendet? – jtbandes

Antwort

0

Sie müssen Ihre Abfrage tatsächlich ausführen.

let query = self.createStreamingQuery() 
self.health.executeQuery(query) 
+0

Danke! Noch eine Sache, jetzt wird die Speicheradresse gedruckt, wie kann ich das in lesbare Daten ändern? – dnaland

+0

@dnaland Entschuldigung, ich habe nicht verstanden, was du gesagt hast. Kannst du das bitte klären? – penatheboss

+0

Wenn ich den Code versuchen, läuft das ist, was auf der Konsole ausgegeben wird: Warnung: keine objektiv-laden konnte C-Klasseninformationen. Dies wird die Qualität der verfügbaren Typinformationen erheblich reduzieren. Wie kann ich das in das Lesen von Daten konvertieren? – dnaland