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

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

Разработчик

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

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

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

HKCorrelationQuery

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


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


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


Swift

import HealthKit

Objective C

@import HealthKit;

Доступность


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

HealthKit использует запросы корреляции для поиска корреляций в хранилище HealthKit. Корреляция является контейнером, группирующимся много количеств или выборок категории. Используйте запросы корреляции для выполнения сложных поисков HKCorrelation объекты.

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

Запрос разрешения совместно использовать и читать

В отличие от других демонстрационных типов, Вы не запрашиваете разрешение совместно использовать и считать типы корреляции непосредственно. Вместо этого Вы запрашиваете разрешение совместно использовать и считать каждый из демонстрационных типов, содержавших в корреляции.

При сохранении корреляции приложение должно иметь разрешение совместно использовать все содержащие в нем объекты. Если приложение не имеет разрешения совместно использовать один или больше содержащих в нем объектов, сбои работы.

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

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

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

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

Перечисление 1Searching для высокой еды калории

Swift

  • var highCalorieFoods: [HKCorrelationQuery] = []
  • let highCalorie = HKQuantity(unit: HKUnit.kilocalorieUnit(),
  • doubleValue: 800.0);
  • let greaterThanHighCalorie = HKQuery.predicateForQuantitySamplesWithOperatorType(
  • .GreaterThanOrEqualToPredicateOperatorType, quantity: highCalorie)
  • let energyConsumed = HKObjectType.quantityTypeForIdentifier(
  • HKQuantityTypeIdentifierDietaryEnergyConsumed)
  • let samplePredicates = [energyConsumed: greaterThanHighCalorie]
  • let foodType = HKCorrelationType.correlationTypeForIdentifier(
  • HKCorrelationTypeIdentifierFood)
  • let query = HKCorrelationQuery(type: foodType, predicate: nil, samplePredicates: samplePredicates)
  • {
  • query, results, error in
  • if let correlations = results as? [HKCorrelationQuery] {
  • for correlation in correlations {
  • highCalorieFoods.append(correlation)
  • }
  • }
  • else {
  • // Provide proper error handling here...
  • println("An error occurred while searching for high calorie food: \(error.localizedDescription)")
  • abort()
  • }
  • println("Found \(highCalorieFoods.count) foods: \(highCalorieFoods)")
  • }
  • healthStore.executeQuery(query)

Objective C

  • NSMutableArray *highCalorieFoods = [NSMutableArray array];
  • HKQuantity *highCalorie = [HKQuantity quantityWithUnit:[HKUnit kilocalorieUnit]
  • doubleValue:800.0];
  • NSPredicate *greaterThanHighCalorie =
  • [HKQuery predicateForQuantitySamplesWithOperatorType:
  • NSGreaterThanOrEqualToPredicateOperatorType quantity:highCalorie];
  • HKQuantityType *energyConsumed =
  • [HKObjectType quantityTypeForIdentifier:
  • HKQuantityTypeIdentifierDietaryEnergyConsumed];
  • NSDictionary *samplePredicates = @{energyConsumed : greaterThanHighCalorie};
  • HKCorrelationType *foodType =
  • [HKCorrelationType correlationTypeForIdentifier:HKCorrelationTypeIdentifierFood];
  • HKCorrelationQuery *query =
  • [[HKCorrelationQuery alloc]
  • initWithType:foodType predicate:nil
  • samplePredicates:samplePredicates
  • completion:^(HKCorrelationQuery *query, NSArray *correlations, NSError *error) {
  • if (correlations == nil) {
  • // Provide proper error handling here...
  • NSLog(@"An error occurred while searching for high calorie food: %@",
  • error.localizedDescription);
  • abort();
  • }
  • for (HKCorrelation *correlation in correlations) {
  • [highCalorieFoods addObject:correlation];
  • }
  • NSLog(@"Found %lu foods: %@", (unsigned long)[highCalorieFoods count], highCalorieFoods);
  • }];
  • [self.healthStore executeQuery:query];

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

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

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

Разделение на подклассы примечаний

Как много классов HealthKit, HKCorrelationQuery класс не должен быть разделен на подклассы.

  • Инстанцирует и возвращает запрос корреляции.

    Объявление

    Swift

    init!(type correlationType: HKCorrelationType!, predicate predicate: NSPredicate!, samplePredicates samplePredicates: [NSObject : AnyObject]!, completion completion: ((HKCorrelationQuery!, [AnyObject]!, NSError!) -> Void)!)

    Objective C

    - (instancetype)initWithType:(HKCorrelationType *)correlationType predicate:(NSPredicate *)predicate samplePredicates:(NSDictionary *)samplePredicates completion:(void (^)(HKCorrelationQuery *query, NSArray *correlations, NSError *error))completion

    Параметры

    correlationType

    Тип корреляции для поиска.

    predicate

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

    samplePredicates

    Словарь, ключи которого HKSampleType экземпляры, и чьи значения NSPredicate экземпляры. Запрос выполняет итерации по всем выборкам в корреляции. Для каждой выборки это ищет соответствующий предикат на основе типа выборки и затем оценивает тот предикат против выборки. Если словарь не содержит соответствующий демонстрационный тип, запрос обрабатывает его как a nil предикат, и принимает выборку.

    Если этот запрос собирается соответствовать корреляцию, тремя вещами должна быть истина:

    • Объект корреляции должен соответствовать предоставленный параметр предиката.

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

    • Для каждой выборки в корреляции используйте тип выборки для поиска его предиката в демонстрационном словаре предиката. Если словарь содержит соответствующий предикат, выборка должна соответствовать тот предикат. Если словарь не содержит соответствующий предикат, выборка проигнорирована (это может иметь любое значение).

    completion

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

    query

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

    correlations

    Массив, содержащий корреляции, найденные запросом, или nil если происходит ошибка.

    error

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

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

    Недавно инициализированный объект корреляции.

    Обсуждение

    После инстанцирования запроса, выполненного это путем вызова HKHealthStore класс executeQuery: метод. Запросы работают на фоновом потоке. Как только запрос завершен, обработчик результатов выполняется на фоновом потоке. Вы обычно диспетчеризируете эти результаты основному потоку для обновления пользовательского интерфейса.

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

    Objective C

    @import HealthKit;

    Swift

    import HealthKit

    Доступность

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

  • correlationType Свойство

    Тип корреляции для поиска. (только для чтения)

    Объявление

    Swift

    @NSCopying var correlationType: HKCorrelationType! { get }

    Objective C

    @property(readonly, copy) HKCorrelationType *correlationType

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

    Objective C

    @import HealthKit;

    Swift

    import HealthKit

    Доступность

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

  • samplePredicates Свойство

    Словарь, ключи которого HKSampleType экземпляры и чьи значения NSPredicate экземпляры. (только для чтения)

    Объявление

    Swift

    var samplePredicates: [NSObject : AnyObject]! { get }

    Objective C

    @property(readonly, copy) NSDictionary *samplePredicates

    Обсуждение

    Запрос использует этот словарь для выполнения сложных тестов против содержания корреляции. Для получения дополнительной информации посмотрите initWithType:predicate:samplePredicates:completion:.

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

    Objective C

    @import HealthKit;

    Swift

    import HealthKit

    Доступность

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