HKStatisticsCollectionQuery
Наследование
Оператор импорта
Swift
import HealthKit
Objective C
@import HealthKit;
Доступность
Доступный в iOS 8.0 и позже.
Запрос набора статистики позволяет Вам выполнить многократные запросы статистики по серии временных интервалов фиксированной длины. Например, Вы могли бы создать запрос набора статистики, вычисляющий общее количество шагов на каждый день или средней частоты пульса на каждый час. Запросы набора статистики часто используются для создания данных для графиков и диаграмм. Когда соответствующие выборки добавлены к или удалены из хранилища HealthKit, как запросы наблюдателя, запросы набора могут также получить обновления.
Запросы набора статистики используют точку привязки и временной интервал для разделения набора соответствия выборок в наборы. Точка привязки определяет произвольную начальную точку. Позиция этой точки часто не имеет значения. Это могло быть в будущем или в прошлом. Временные интервалы расширятся далеко от этой точки привязки в обоих направлениях.
Например, когда каждый набор начинается, при использовании интервала с 1 дневным временем точка привязки определяет время. Точная дата точки привязки не имеет значения. Это могло быть 3:34, 1 января 1970 или 3:34, 15 марта 2065. В обоих случаях запрос набора статистики делит соответствующие выборки в дни, запускаясь каждый день в 3:34.
Можно использовать запросы набора статистики только с выборками количества. Если Вы хотите вычислить статистику по проверкам или выборкам корреляции, необходимо выполнить надлежащий запрос и обработать данные сами.
Запросы набора статистики являются главным образом неизменными. Можно присвоить запрос initialResultsHandler и statisticsUpdateHandler свойства после инстанцирования объекта. Все другие свойства должны быть установлены, когда Вы инстанцируете объекта, и они не могут измениться.
Для получения дополнительной информации о запросах статистики, посмотрите Ссылку класса HKStatisticsQuery.
Выполнение запросов статистики
Вы создаете демонстрационный запрос путем вызова initWithQuantityType:quantitySamplePredicate:options:completionHandler: инициализатор. После того, как запрос инстанцируют, Вы выполняете его путем вызова медицинского хранилища executeQuery: метод. Этот метод выполняет запрос на анонимной очереди фоновых задач. Когда запрос завершен, он выполняет обработчик результатов на той же очереди фоновых задач (но не обязательно на том же потоке). Как правило, Вы диспетчеризируете эти результаты назад основной очереди для обновления пользовательского интерфейса.
Пример кода перечисления 1 показывает, как создать запрос набора статистики и обработать результаты.
Swift
let calendar = NSCalendar.currentCalendar()let interval = NSDateComponents()interval.day = 7// Set the anchor date to Monday at 3:00 a.m.let anchorComponents =calendar.components(.CalendarUnitDay | .CalendarUnitMonth |.CalendarUnitYear | .CalendarUnitWeekday, fromDate: NSDate())let offset = (7 + anchorComponents.weekday - 2) % 7anchorComponents.day -= offsetanchorComponents.hour = 3let anchorDate = calendar.dateFromComponents(anchorComponents)let quantityType =HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)// Create the querylet query = HKStatisticsCollectionQuery(quantityType: quantityType,quantitySamplePredicate: nil,options: .CumulativeSum,anchorDate: anchorDate,intervalComponents: interval)// Set the results handlerquery.initialResultsHandler = {query, results, error inif error != nil {// Perform proper error handling hereprintln("*** An error occurred while calculating the statistics: \(error.localizedDescription) ***")abort()}let endDate = NSDate()let startDate =calendar.dateByAddingUnit(.MonthCalendarUnit,value: -3, toDate: endDate, options: nil)// Plot the weekly step counts over the past 3 monthsresults.enumerateStatisticsFromDate(startDate, toDate: endDate) {statistics, stop inif let quantity = statistics.sumQuantity() {let date = statistics.startDatelet value = quantity.doubleValueForUnit(HKUnit.countUnit())self.plotData(value, forDate: date)}}}healthStore.executeQuery(query)
Objective C
NSCalendar *calendar = [NSCalendar currentCalendar];NSDateComponents *interval = [[NSDateComponents alloc] init];interval.day = 7;// Set the anchor date to Monday at 3:00 a.m.NSDateComponents *anchorComponents =[calendar components:NSCalendarUnitDay | NSCalendarUnitMonth |NSCalendarUnitYear | NSCalendarUnitWeekday fromDate:[NSDate date]];NSInteger offset = (7 + anchorComponents.weekday - 2) % 7;anchorComponents.day -= offset;anchorComponents.hour = 3;NSDate *anchorDate = [calendar dateFromComponents:anchorComponents];HKQuantityType *quantityType =[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];// Create the queryHKStatisticsCollectionQuery *query =[[HKStatisticsCollectionQuery alloc]initWithQuantityType:quantityTypequantitySamplePredicate:niloptions:HKStatisticsOptionCumulativeSumanchorDate:anchorDateintervalComponents:interval];// Set the results handlerquery.initialResultsHandler =^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *results, NSError *error) {if (error) {// Perform proper error handling hereNSLog(@"*** An error occurred while calculating the statistics: %@ ***",error.localizedDescription);abort();}NSDate *endDate = [NSDate date];NSDate *startDate = [calendardateByAddingUnit:NSCalendarUnitMonthvalue:-3toDate:endDateoptions:0];// Plot the weekly step counts over the past 3 months[resultsenumerateStatisticsFromDate:startDatetoDate:endDatewithBlock:^(HKStatistics *result, BOOL *stop) {HKQuantity *quantity = result.sumQuantity;if (quantity) {NSDate *date = result.startDate;double value = [quantity doubleValueForUnit:[HKUnit countUnit]];[self plotData:value forDate:date];}}];};[self.healthStore executeQuery:query];
Выборка в Перечислении 1 демонстрирует, как вычислить общие количества шага на неделю с помощью запроса набора статистики. Этот код запускается путем создания 1-недельного временного интервала. Затем, это назначает дату привязки к утру понедельника в 3:00. Поскольку интервал 1 неделя длиной, точная дата привязки не имеет значения. Каждый набор статистики представляет точно 1 неделю, запускающуюся в понедельник в 3:00.
Затем, выборка создает тип количества для количеств шага и затем создает сам запрос. В отличие от того, как Вы создаете другие запросы, Вы не устанавливаете блок обратного вызова при инстанцировании запроса набора статистики. Вместо этого можно или установить начальный обработчик результата или обработчик обновления статистики (или оба) по мере необходимости для приложения. В этом случае пример кода просто устанавливает начальный обработчик результатов, позволяя ему вычислить статистику по выборкам, в настоящее время сохраненным в HealthKit.
В блоке обработчика результата, проверки кода, чтобы видеть, произошла ли ошибка. Если это не находит ошибку, это вычисляет запуск и время окончания для 3-месячного окна и затем выполняет итерации все время интервалов в том окне. Набор статистики передает блок перечисления объект статистики для каждого временного интервала между запуском и даты окончания. Однако, если временной интервал не содержит выборок, предоставленная статистика sumQuantity возвраты метода nil. Поэтому выборка должна проверить, чтобы видеть, имеет ли она допустимое количество. Если это делает, это графически изображает данных; иначе, это просто пропускает тот временной интервал.
Так как мы не обеспечивали, обновление заканчивается обработчик, когда начальный блок результатов сделан, обработав данные, запрос останавливается автоматически. Если бы мы предоставили менеджеру по обновлению, запрос набора статистики продолжал бы контролировать хранилище HealthKit после того, как это генерировало начальные результаты.
После того, как выборка определяет блок обработчика результата, запрос завершен. Пример кода просто выполняет этот запрос с помощью хранилища HealthKit.
-
init (quantityType:quantitySamplePredicate:options:anchorDate:intervalComponents:) - initWithQuantityType:quantitySamplePredicate:options:anchorDate:intervalComponents:Инициализирует запрос набора статистики для выполнения указанных вычислений по ряду временных интервалов.
Объявление
Swift
init!(quantityTypequantityType: HKQuantityType!, quantitySamplePredicatequantitySamplePredicate: NSPredicate!, optionsoptions: HKStatisticsOptions, anchorDateanchorDate: NSDate!, intervalComponentsintervalComponents: NSDateComponents!)Objective C
- (instancetype)initWithQuantityType:(HKQuantityType *)quantityTypequantitySamplePredicate:(NSPredicate *)quantitySamplePredicateoptions:(HKStatisticsOptions)optionsanchorDate:(NSDate *)anchorDateintervalComponents:(NSDateComponents *)intervalComponentsПараметры
quantityTypeТип выборки для поиска. Этот тип должен быть экземпляром
HKQuantityTypeкласс. Вы не можете выполнить запросы набора статистики с помощью других демонстрационных типов.quantitySamplePredicateПредикат, ограничивающий результаты, возвращенные запросом. Можно передать
nilесли Вы хотите выполнить статистическое вычисление по всем выборкам указанного типа.optionsСписок опций, определяющих тип статистических выполняемых вычислений и путь, которым объединяются данные из многократных источников. Для списка допустимых опций посмотрите
HKStatisticsOptions.anchorDateДата раньше привязывала временные интервалы набора. Используйте этот параметр для установки времени начала для временных интервалов. Например, при использовании дневного интервала Вы могли бы создать объект даты со временем 2:00. Это наборы значений запуск дня для каждого из Ваших временных интервалов.
Технически, привязка устанавливает время начала для единственного временного интервала. Все другие временные интервалы должны выровняться с этим интервалом. Временные интервалы могут расшириться прежде или после даты привязки. Каждый временной интервал имеет ту же длину, и между смежными интервалами нет никакого разрыва. Думайте о времени как о числовой оси: дата привязки представляет свой источник с интервалами, создающими метки, расширяющиеся далеко от источника в обоих направлениях.
intervalComponentsКомпоненты даты, определяющие временной интервал для каждого объекта статистики в наборе. Для набора демонстрационных временных интервалов см. Перечисление 2.
Возвращаемое значение
Недавно инициализированный набор статистики запрашивает объект.
Обсуждение
После того, как Вы инстанцируете запроса, устанавливаете один или оба из обработчиков обратного вызова, и затем вызываете
HKHealthStoreклассexecuteQuery:метод для выполнения его. Запросы работают на анонимной очереди фоновых задач. Как только запрос завершен, начальный обработчик результатов выполняется на той же очереди фоновых задач (но не обязательно на том же потоке). Вы обычно диспетчеризируете эти результаты основной очереди обновить пользовательский интерфейс.Запросы набора статистики могут также действовать как продолжительные запросы. Если Вы присваиваете обработчик обновления статистики, они продолжают контролировать хранилище HealthKit после сбора начальных результатов. Обработчик обновления статистики вызывают на очереди фоновых задач каждый раз, когда соответствующая выборка сохраняется к Хранилищу HealthKit. Можно отменить этот запрос путем вызова хранилища
stopQuery:метод.Оператор импорта
Objective C
@import HealthKit;Swift
import HealthKitДоступность
Доступный в iOS 8.0 и позже.
-
initialResultsHandlerСвойствоОбработчик результатов для начальных результатов этого запроса.
Объявление
Swift
var initialResultsHandler: ((HKStatisticsCollectionQuery!, HKStatisticsCollection!, NSError!) -> Void)!Objective C
@property(nonatomic, copy) void (^initialResultsHandler)( HKStatisticsCollectionQuery *query, HKStatisticsCollection *result, NSError *error)Обсуждение
Если это свойство не установлено в
nil, запрос выполняет обработчик результатов на очереди фоновых задач после того, как это закончило вычислять статистику для всех выборок соответствия, в настоящее время сохраненных в HealthKit.Оператор импорта
Objective C
@import HealthKit;Swift
import HealthKitДоступность
Доступный в iOS 8.0 и позже.
См. также
-
statisticsUpdateHandlerСвойствоОбработчик результатов для контроля обновлений к хранилищу HealthKit.
Объявление
Swift
var statisticsUpdateHandler: ((HKStatisticsCollectionQuery!, HKStatistics!, HKStatisticsCollection!, NSError!) -> Void)!Objective C
@property(nonatomic, copy) void (^statisticsUpdateHandler)( HKStatisticsCollectionQuery *query, HKStatistics *statistics, HKStatisticsCollection *collection, NSError *error)Обсуждение
Если это свойство установлено в
nil, запрос набора статистики автоматически остановится, как только он закончил вычислять начальные результаты. Если это свойство неnil, запрос ведет себя так же к запросу наблюдателя. Это продолжает работать, контролируя хранилище HealthKit. Если какие-либо новые, соответствующие выборки сохраняются к хранилищу — или если какая-либо из существующих выборок соответствия удалена из хранилища — запрос выполняет обработчик обновления на очереди фоновых задач.Оператор импорта
Objective C
@import HealthKit;Swift
import HealthKitДоступность
Доступный в iOS 8.0 и позже.
-
anchorDateСвойствоДата привязки временных интервалов набора. (только для чтения)
Объявление
Swift
var anchorDate: NSDate! { get }Objective C
@property(readonly, strong) NSDate *anchorDateОбсуждение
Дата раньше привязывала временные интервалы набора.
Используйте дату привязки для установки времени начала для временных интервалов. Например, при использовании дневного интервала Вы могли бы создать объект даты со временем 2:00. Это наборы значений запуск каждого дня для всех Ваших временных интервалов.
Технически, привязка устанавливает время начала для единственного временного интервала. Все другие временные интервалы должны выровняться с этим интервалом. Временные интервалы могут расшириться прежде или после даты привязки. Каждый временной интервал имеет ту же длину, и между смежными интервалами нет никакого разрыва. Думайте о времени как о числовой оси: дата привязки представляет свой источник с интервалами, создающими метки, расширяющиеся далеко от источника в обоих направлениях.
Оператор импорта
Objective C
@import HealthKit;Swift
import HealthKitДоступность
Доступный в iOS 8.0 и позже.
-
intervalComponentsСвойствоКомпоненты даты, определяющие временной интервал для каждого объекта статистики в наборе. (только для чтения)
Объявление
Swift
@NSCopying var intervalComponents: NSDateComponents! { get }Objective C
@property(readonly, copy) NSDateComponents *intervalComponentsОбсуждение
Это свойство определяет длину временных интервалов для Вашего набора. Перечисление 2 показывает много общих временных интервалов.
Временные интервалы перечисления 2Common Swift
let fiveMinutes = NSDateComponents()fiveMinutes.minute = 5let hour = NSDateComponents()hour.hour = 1let day = NSDateComponents()day.day = 1let week = NSDateComponents()week.day = 7let month = NSDateComponents()month.month = 1let year = NSDateComponents()year.year = 1
Objective C
NSDateComponents *fiveMinutes = [[NSDateComponents alloc] init];fiveMinutes.minute = 5;NSDateComponents *hour = [[NSDateComponents alloc] init];hour.hour = 1;NSDateComponents *day = [[NSDateComponents alloc] init];day.day = 1;NSDateComponents *week = [[NSDateComponents alloc] init];week.day = 7;NSDateComponents *month = [[NSDateComponents alloc] init];month.month = 1;NSDateComponents *year = [[NSDateComponents alloc] init];year.year = 1;
Оператор импорта
Objective C
@import HealthKit;Swift
import HealthKitДоступность
Доступный в iOS 8.0 и позже.
-
optionsСвойствоСписок опций, определяющих тип статистических выполняемых вычислений и путь, которым объединяются данные из многократных источников. (только для чтения)
Объявление
Swift
var options: HKStatisticsOptions { get }Objective C
@property(readonly) HKStatisticsOptions optionsОбсуждение
Для списка допустимых опций посмотрите
HKStatisticsOptions.Оператор импорта
Objective C
@import HealthKit;Swift
import HealthKitДоступность
Доступный в iOS 8.0 и позже.
