2017-02-01 1 views
-2

Aktualisiert: Ich versuche, eine Funktion aufzurufen, die auf das HealthKit zugreift und die Anzahl der an diesem Tag ausgeführten Schritte zurückgibt.Swift 3: Aufruf der Schrittzähler-Abfrage vom Health Kit

Ich habe eine Funktion erstellt und jetzt versuche ich es zu nennen. Der Code für die Funktion lautet wie folgt:

//Reading data from Health app. 
func todayTotalSteps (input: String, completion: @escaping (_ stepRetrieved: Double) -> Void){ 

    // Define the Step Quantity Type. 
    let stepsCount = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount) 

    // Get the start of the day. 
    let date = NSDate() 
    let calendar = Calendar(identifier: Calendar.Identifier.gregorian) 
    let newDate = calendar.startOfDay(for: date as Date) 
    let yesterday = NSCalendar.current.date(byAdding: .day, value: -1, to: Date()) 
    let now = Date() 

    // Set the predicates & interval 
    let predicate = HKQuery.predicateForSamples(withStart: newDate as Date, end: NSDate() as Date, options: .strictStartDate) 
    let interval: NSDateComponents = NSDateComponents() 

    interval.day = 1 

    //Perform the Query 
    let query = HKStatisticsCollectionQuery(quantityType: stepsCount!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: newDate as Date, intervalComponents: interval as DateComponents) 
    query.initialResultsHandler = {query, results, error in 

     if error != nil { 
      // Something went wrong. 
      return 
     } 

     if let myResults = results{ 
      myResults.enumerateStatistics(from: yesterday! as Date, to: now as Date){ 
       statistics, stop in 

       if let quantity = statistics.sumQuantity(){ 
        let steps = quantity.doubleValue(for: HKUnit.count()) 

        print("Steps = \(steps)") 
        completion(steps) 
       } 
      } 
     } 
    } 
    healthStore.execute(query) 


} 

Ich bin eine Schaltfläche Aktion erstellen und darin Ich versuche, die todayTotalSteps Funktion aufzurufen. Ich habe HealthKit-Berechtigungen in einer anderen Funktion aktiviert. Das Ausführen der App auf meinem iPhone 5 funktioniert gut, bis ich die Funktion todayTotalSteps und die Schaltfläche mit ihrer Aktion hinzufüge. Wenn ich dann auf die Schaltfläche tippe, die ich hinzugefügt habe, erhalte ich den folgenden Fehler und nichts passiert mehr. Im Debug-Bereich heißt es:

"HealthkitAccess [267: 13336] [Abfrage] Fehler beim Aktivieren der Abfrage: Fehler Domain = com.apple.healthkit Code = 5" Autorisierung nicht bestimmt "UserInfo = {NSLocalizedDescription = Autorisierung nicht bestimmt} "

Die Tastenfunktion ist unten geschrieben:

@IBAction func getSteps(_ sender: Any) { 
    todayTotalSteps(input: "commands"){stepRetrieved in print(stepRetrieved) 
} 

ich bin mit Swift 3, Xcode 8. ich bin neu zu schnell und ich würde wirklich zu schätzen jede Einsicht dieser Arbeit zu bekommen! Vielen Dank!

+3

Zählen Sie Ihre geschweiften Klammern. Sie benötigen die gleiche Anzahl von geschweiften geschweiften Klammern. – rmaddy

Antwort

1
@IBAction func getSteps(_ sender: Any) { 
    todayTotalSteps(input: "commands") { stepRetrieved in 
     print(stepRetrieved) 
    } 
} 
+0

Hallo, ich dachte, dass mein einziges Problem darin besteht, die Funktion in meiner Taste nicht aufrufen zu können, aber die Funktion selbst funktioniert nicht. Würdest du es dir nochmal ansehen können? Vielen Dank! – user3546200

1

Das neue HK erfordert, dass Sie vor dem Abrufen von Daten die Berechtigung des Benutzers anfordern. In ihrem neuen Update, sie erwähnt:

„Wichtig Eine iOS-App am oder nach dem iOS verknüpft 10.0 in seiner Info.plist-Datei für die Datentypen, die Nutzungsbeschreibung Schlüssel enthalten muss darauf zugreifen muss oder es stürzt ab. Um auf HealthKit-Daten speziell zuzugreifen und zu aktualisieren, muss es die NSHealthShareUsageDescription und die NSHealthUpdateUsageDescription Schlüssel enthalten. " https://developer.apple.com/reference/healthkit

Verwandte Themen