Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека Разработчика iOS

Разработчик

Ссылка платформы HealthKit ссылка класса HKStatisticsCollectionQuery

Опции
Развертывание Target:

На этой странице
Язык:

HKStatisticsCollectionQuery

Наследование


Соответствует


Оператор импорта


Swift

import HealthKit

Objective C

@import HealthKit;

Доступность


Доступный в iOS 8.0 и позже.

Запрос набора статистики позволяет Вам выполнить многократные запросы статистики по серии временных интервалов фиксированной длины. Например, Вы могли бы создать запрос набора статистики, вычисляющий общее количество шагов на каждый день или средней частоты пульса на каждый час. Запросы набора статистики часто используются для создания данных для графиков и диаграмм. Когда соответствующие выборки добавлены к или удалены из хранилища HealthKit, как запросы наблюдателя, запросы набора могут также получить обновления.

image: ../Art/statistics_collection_2x.png

Запросы набора статистики используют точку привязки и временной интервал для разделения набора соответствия выборок в наборы. Точка привязки определяет произвольную начальную точку. Позиция этой точки часто не имеет значения. Это могло быть в будущем или в прошлом. Временные интервалы расширятся далеко от этой точки привязки в обоих направлениях.

Например, когда каждый набор начинается, при использовании интервала с 1 дневным временем точка привязки определяет время. Точная дата точки привязки не имеет значения. Это могло быть 3:34, 1 января 1970 или 3:34, 15 марта 2065. В обоих случаях запрос набора статистики делит соответствующие выборки в дни, запускаясь каждый день в 3:34.

Можно использовать запросы набора статистики только с выборками количества. Если Вы хотите вычислить статистику по проверкам или выборкам корреляции, необходимо выполнить надлежащий запрос и обработать данные сами.

Запросы набора статистики являются главным образом неизменными. Можно присвоить запрос initialResultsHandler и statisticsUpdateHandler свойства после инстанцирования объекта. Все другие свойства должны быть установлены, когда Вы инстанцируете объекта, и они не могут измениться.

Для получения дополнительной информации о запросах статистики, посмотрите Ссылку класса HKStatisticsQuery.

Выполнение запросов статистики

Вы создаете демонстрационный запрос путем вызова initWithQuantityType:quantitySamplePredicate:options:completionHandler: инициализатор. После того, как запрос инстанцируют, Вы выполняете его путем вызова медицинского хранилища executeQuery: метод. Этот метод выполняет запрос на анонимной очереди фоновых задач. Когда запрос завершен, он выполняет обработчик результатов на той же очереди фоновых задач (но не обязательно на том же потоке). Как правило, Вы диспетчеризируете эти результаты назад основной очереди для обновления пользовательского интерфейса.

Пример кода перечисления 1 показывает, как создать запрос набора статистики и обработать результаты.

Перечисление 1Plotting еженедельно продвигается количества

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) % 7
  • anchorComponents.day -= offset
  • anchorComponents.hour = 3
  • let anchorDate = calendar.dateFromComponents(anchorComponents)
  • let quantityType =
  • HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
  • // Create the query
  • let query = HKStatisticsCollectionQuery(quantityType: quantityType,
  • quantitySamplePredicate: nil,
  • options: .CumulativeSum,
  • anchorDate: anchorDate,
  • intervalComponents: interval)
  • // Set the results handler
  • query.initialResultsHandler = {
  • query, results, error in
  • if error != nil {
  • // Perform proper error handling here
  • println("*** 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 months
  • results.enumerateStatisticsFromDate(startDate, toDate: endDate) {
  • statistics, stop in
  • if let quantity = statistics.sumQuantity() {
  • let date = statistics.startDate
  • let 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 query
  • HKStatisticsCollectionQuery *query =
  • [[HKStatisticsCollectionQuery alloc]
  • initWithQuantityType:quantityType
  • quantitySamplePredicate:nil
  • options:HKStatisticsOptionCumulativeSum
  • anchorDate:anchorDate
  • intervalComponents:interval];
  • // Set the results handler
  • query.initialResultsHandler =
  • ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *results, NSError *error) {
  • if (error) {
  • // Perform proper error handling here
  • NSLog(@"*** An error occurred while calculating the statistics: %@ ***",
  • error.localizedDescription);
  • abort();
  • }
  • NSDate *endDate = [NSDate date];
  • NSDate *startDate = [calendar
  • dateByAddingUnit:NSCalendarUnitMonth
  • value:-3
  • toDate:endDate
  • options:0];
  • // Plot the weekly step counts over the past 3 months
  • [results
  • enumerateStatisticsFromDate:startDate
  • toDate:endDate
  • withBlock:^(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.

  • Инициализирует запрос набора статистики для выполнения указанных вычислений по ряду временных интервалов.

    Объявление

    Swift

    init!(quantityType quantityType: HKQuantityType!, quantitySamplePredicate quantitySamplePredicate: NSPredicate!, options options: HKStatisticsOptions, anchorDate anchorDate: NSDate!, intervalComponents intervalComponents: NSDateComponents!)

    Objective C

    - (instancetype)initWithQuantityType:(HKQuantityType *)quantityType quantitySamplePredicate:(NSPredicate *)quantitySamplePredicate options:(HKStatisticsOptions)options anchorDate:(NSDate *)anchorDate intervalComponents:(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

  • 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 = 5
    • let hour = NSDateComponents()
    • hour.hour = 1
    • let day = NSDateComponents()
    • day.day = 1
    • let week = NSDateComponents()
    • week.day = 7
    • let month = NSDateComponents()
    • month.month = 1
    • let 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 и позже.