Я хочу получить самое последнее (также известное) значение записи приложения Health (Kit).Например, значение шага из последней записи HKSource.
Я думал, что это будет работать с атрибутом HKStatisticsOptions.discreteMostRecent
в построении запроса.
Текущий результат
Код работает нормально, без ошибок.Моя статистика имеет правильную дату начала и окончания (если доступно только одно значение, дата начала и окончания одинакова).
Проблема в том, что список statistics.sources
всегда равен нулю, как и statistics.mostRecentQuantity()
также ноль.
Все не связанные с HKSource операции суммирования sumQuantity()
работают без проблем.
Другие сообщения Stackoverflow
Я бы попробовал эту идею сиспользуя запрос с пределом 1 и описанием сортировки из этого поста , но мне нужно также показать другие исторические значения в подробном представлении.Вот почему я подумал, что я мог бы запросить только один диапазон дат количества, использовать последний как мой «последний» и все остальные для моего представления таблицы истории.
Код
func requestMeasurements(completion: @escaping (HKStatistics?, AppError?) -> Void)
{
let healthStore = HKHealthStore()
// Check if HK is available.
guard HKHealthStore.isHealthDataAvailable() else
{
completion(nil, AppError.healthInformationNotAvailable)
return
}
// Check if HK information is available
guard let quantitiyType = HKQuantityType.quantityType(forIdentifier: .stepCount) else
{
completion(nil, AppError.requestedHealthDataTypeNotAvailable)
return
}
let typeSet: Set = [quantitiyType]
// Request user access to HK and especially this type
healthStore.requestAuthorization(toShare: nil, read: typeSet)
{ success, error in
// Ensure that the app has the required access
if success == false
{
print(error?.localizedDescription ?? "<no error description>")
completion(nil, AppError.noAccessToRequestedInformation)
return
}
// Build query
let now = Date()
let lastSync = Calendar.current.startOfDay(for: now)
let prediction = HKQuery.predicateForSamples(withStart: lastSync, end: now, options: .strictStartDate)
let query = HKStatisticsQuery(quantityType: quantitiyType, quantitySamplePredicate: prediction, options: HKStatisticsOptions.discreteMostRecent)
{ _, statistics, error in
// Check for error.
if let _error = error
{
print("An error occured: \(_error.localizedDescription)")
completion(nil, AppError.requestingFailed)
return
}
// Check if statistics are available.
guard let _statistics = statistics else
{
completion(nil, AppError.requestingFailed)
return
}
completion(_statistics, nil)
}
// Execure query
healthStore.execute(query)
}