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

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

Разработчик

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

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

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

HKObserverQuery

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


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


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


Swift

import HealthKit

Objective C

@import HealthKit;

Доступность


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

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

Запросы наблюдателя являются неизменными: Их свойства установлены, когда они сначала создаются, и они не могут измениться.

Используя запросы наблюдателя

Вы создаете запрос наблюдателя путем вызова initWithSampleType:predicate:updateHandler: инициализатор. После того, как запрос инстанцируют, Вы выполняете его путем вызова хранилища HealthKit executeQuery: метод. Запросы наблюдателя являются продолжительными задачами. Они продолжают работать на анонимном фоновом потоке, вызывая их обработчик результатов каждый раз, когда изменяются данные, соответствующие запрос. Для остановки запроса вызовите хранилище HealthKit stopQuery: метод.

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

Перечисление 1Watching для обновлений

Swift

  • let sampleType =
  • HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
  • let query = HKObserverQuery(sampleType: sampleType, predicate: nil) {
  • query, completionHandler, error in
  • if error != nil {
  • // Perform Proper Error Handling Here...
  • println("*** An error occured while setting up the stepCount observer. \(error.localizedDescription) ***")
  • abort()
  • }
  • // Take whatever steps are necessary to update your app's data and UI
  • // This may involve executing other queries
  • self.updateDailyStepCount()
  • // If you have subscribed for background updates you must call the completion handler here.
  • // completionHandler()
  • }
  • healthStore.executeQuery(query)

Objective C

  • HKSampleType *sampleType =
  • [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
  • HKObserverQuery *query =
  • [[HKObserverQuery alloc]
  • initWithSampleType:sampleType
  • predicate:nil
  • updateHandler:^(HKObserverQuery *query,
  • HKObserverQueryCompletionHandler completionHandler,
  • NSError *error) {
  • if (error) {
  • // Perform Proper Error Handling Here...
  • NSLog(@"*** An error occured while setting up the stepCount observer. %@ ***",
  • error.localizedDescription);
  • abort();
  • }
  • // Take whatever steps are necessary to update your app's data and UI
  • // This may involve executing other queries
  • [self updateDailyStepCount];
  • // If you have subscribed for background updates you must call the completion handler here.
  • // completionHandler();
  • }];
  • [self.healthStore executeQuery:query];

Перечисление 1creates запрос наблюдателя, получающий обновления каждый раз, когда изменяются данные количества шага HealthKit. Это запускается путем создания демонстрационного типа для количества шага. Тогда это создает сам запрос. Гарантировать, что этот запрос получает обновления каждый раз, когда любые данные количества шага сохранены к или удалены из хранилища, демонстрационных передач в a nil предикат. Затем в обработчике обновления пример кода проверяет на ошибки. Если никакие ошибки не найдены, это обновляет ежедневные количества шага.

После того, как блок обработчика обновления определяется, запрос завершен. Пример кода просто выполняет этот запрос с помощью хранилища HealthKit.

Получение фоновых поставок

Приложения могут также зарегистрироваться для получения обновлений в то время как в фоновом режиме путем вызова хранилища HealthKit enableBackgroundDeliveryForType:frequency:withCompletion: метод. Этот метод регистрирует Ваше приложение для фоновых уведомлений. HealthKit будит Ваше приложение каждый раз, когда новые выборки указанного типа сохраняются к хранилищу. Ваше приложение вызывают самое большее один раз на период времени, определенный частотой, которую Вы указали при регистрации.

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

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

Для получения дополнительной информации об управлении фоновыми поставками посмотрите Управляющие Фоновые Поставки в Ссылке класса HKHealthStore.

Для получения дополнительной информации о фоновом обработчике завершения поставки посмотрите HKObserverQueryCompletionHandler.

  • Инстанцирует и возвращает запрос, контролирующий хранилище HealthKit и реагирующий на изменения.

    Объявление

    Swift

    init!(sampleType sampleType: HKSampleType!, predicate predicate: NSPredicate!, updateHandler updateHandler: ((HKObserverQuery!, HKObserverQueryCompletionHandler!, NSError!) -> Void)!)

    Objective C

    - (instancetype)initWithSampleType:(HKSampleType *)sampleType predicate:(NSPredicate *)predicate updateHandler:(void (^)(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error))updateHandler

    Параметры

    sampleType

    Тип выборки для поиска. Этот запрос поддерживает все демонстрационные типы. В частности можно передать любой конкретный подкласс HKSampleType класс ( HKQuantityType, HKCategoryType, HKWorkoutType, и HKCorrelationType классы)

    predicate

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

    updateHandler

    Блок, который вызывают, когда соответствующая выборка сохранена к или удалена из хранилища HealthKit. Этот блок берет следующие параметры:

    query

    Ссылка на запрос, вызывая этот блок.

    completionHandler

    Если Вы зарегистрировались для фоновых обновлений, необходимо вызвать этот обработчик завершения, как только Вы сделаны, обработав входящие данные. Это говорит HealthKit об успешном получении фонового обновления. Кроме того, необходимо только вызвать обработчик завершения при использовании фоновых обновлений. Для получения дополнительной информации об использовании этого обработчика завершения посмотрите HKObserverQueryCompletionHandler.

    error

    Если ошибка происходит, этот параметр содержит объект, описывающий ошибку; иначе, это nil.

    Возвращаемое значение

    Недавно инициализированный наблюдатель запрашивает объект.

    Обсуждение

    После инстанцирования запроса вызовите HKHealthStore класс executeQuery: метод для выполнения этого запроса. Запросы наблюдателя являются продолжительными задачами. Они продолжают работать на анонимном фоновом потоке и вызывать их обработчик результатов каждый раз, когда они обнаруживают соответствующие изменения в хранилище HealthKit. Для остановки запроса вызовите HKHealthStore класс stopQuery: метод.

    Предоставленный блок обработчика обновления вызывают каждый раз, когда выборки, соответствующие этот запрос, сохранены к или удалены из хранилища HealthKit. Часто необходимо запускать другие запросы из этого блока для получения обновленных данных. В частности можно использовать Запросы Привязанного объекта для получения списка новых выборок, добавленных к хранилищу. Для получения дополнительной информации посмотрите Ссылку класса HKAnchoredObjectQuery

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

    Objective C

    @import HealthKit;

    Swift

    import HealthKit

    Доступность

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

Типы данных

  • Обработчик завершения для фоновых поставок.

    Объявление

    Swift

    typealias HKObserverQueryCompletionHandler = () -> Void

    Objective C

    typedef void(^HKObserverQueryCompletionHandler)(void);

    Обсуждение

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

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

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

    Objective C

    @import HealthKit;

    Swift

    import HealthKit

    Доступность

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