Wie erzwinge ich, dass eine HKQuery die Anzahl der letzten Schritte lädt?

Derzeit versuche ich, @ zu verwendHKStatisticsQuery, um die Anzahl der Schritte zwischen einem bestimmten Zeitintervall zu ermitteln. Ich mache Test vonshaking das Telefon selbst. Es scheint jedoch, dass das Ergebnis, das ich erhalte, nicht das neueste ist, es sei denn:

Ich öffne dasHealth.app, lass es im Hintergrund laufen und führe den Test in meiner App erneut durch;Ich öffne dasUP app, lass es im Hintergrund laufen und führe den Test in meiner App erneut durch.

Und wenn ich das @ erzwinHealth.app odeUP app, meine App kann die neuesten Daten nicht mehr abrufen. UP muss also etwas tun, was mir fehlt, aber ich kann keine Methode wie "reload" in @ findeHKHealthStore oder verwandte Optionen inHKQuery/HKStatisticsQuery.

Der Code, den ich verwende, ist ganz einfach wie unten. Ich frage mich, ob ich Berechtigungen habe oder etwas vermisse.

    let predicate = HKQuery.predicateForSamplesWithStartDate(date_start, endDate: NSDate(), options: HKQueryOptions.StrictStartDate)
    var type = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)
    var query = HKStatisticsQuery(quantityType: type,
        quantitySamplePredicate: predicate,
        options: .CumulativeSum | .SeparateBySource,
        completionHandler: { query, stats, error in ( /*logs here*/ ) })
    let healthStore = HKHealthStore()
    healthStore.executeQuery(query)

Bearbeiten: Ich habe auch versucht, einige Daten in @ zu schreibeHealthKit aber die Abfrage wird nicht aktualisiert.

Edit2: als ich sagte "die letzten Schritte zählen" meinte ich so etwas wie: 1. führe HKQuery aus; 2. Telefon schütteln; 3. Führen Sie HKQuery erneut aus. Wenn ich den obigen Code 2 Mal ausführe und immer die gleichen Ergebnisse erhalte, aber wenn ich Health.app oder das @ verlasUP app im Hintergrund hat die letzte Abfrage die aktualisierten Ergebnisse erhalten.

Ich habe auch versucht, einige andere APIs aufzurufen, wie zum Beispiel:

    healthStore.enableBackgroundDeliveryForType(type, frequency:.Immediate, withCompletion:{
        (success:Bool, error:NSError!) -> Void in
        let authorized = healthStore.authorizationStatusForType(type)
        LF.log("HEALTH callback success", success)
        LF.log("HEALTH callback authorized", type)
    })

    if HKHealthStore.isHealthDataAvailable() == false {
        LF.log("HEALTH data not available")
        return
    } else {
        LF.log("HEALTH OK")
    }

Für fast keinen Grund, aber versuchen Sie heimlich eine Art Hintergrundaktualisierung "auszulösen". Aber keiner dieser Versuche hat funktioniert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage