Как заставить HKQuery загружать последние шаги?

В настоящее время я пытаюсь использоватьHKStatisticsQuery чтобы получить количество шагов между определенным интервалом времени. Я делаю тест поshaking Сам телефон. Однако, похоже, что результат, который я получаю, не самый последний, если только:

Я открываюHealth.app, оставьте его работать в фоновом режиме и повторите тест в моем приложении;Я открываюUP app, держите его в фоновом режиме, и повторите тест в моем приложении.

И если я заставлю выйти изHealth.app или жеUP appмое приложение не сможет получить самые последние данные снова. Так что UP, должно быть, делает то, что мне не хватает, но я не могу найти какой-либо метод «перезагрузки» вHKHealthStoreили любые связанные параметры вHKQuery/HKStatisticsQuery.

Код, который я использую, довольно прост, как показано ниже. Интересно, есть ли какие-либо разрешения или что-то, что я пропускаю.

    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)

Изменить: я также пытался записать некоторые данные вHealthKit но запрос не обновляется.

Edit2: когда я сказал «количество последних шагов», я имел в виду что-то вроде: 1. выполнить HKQuery; 2. встряхнуть телефон; 3. выполнить HKQuery снова. Выполнение приведенного выше кода 2 раза, и я всегда получаю одинаковые результаты, но если я покину Health.app илиUP приложение в фоновом режиме, последний запрос получил обновленные результаты.

Я также пытался вызвать некоторые другие API, такие как:

    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")
    }

Почти без причины, но попытайтесь тайно «вызвать» какое-то фоновое обновление. Но ни одна из этих попыток не сработала.

Ответы на вопрос(1)

Ваш ответ на вопрос