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

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

Разработчик

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

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

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

HKSampleQuery

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


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


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


Swift

import HealthKit

Objective C

@import HealthKit;

Доступность


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

HealthKit использует демонстрационные запросы для поиска демонстрационных данных в хранилище HealthKit. Можно использовать демонстрационные запросы для поиска любых конкретных подклассов HKSample класс, включая HKCategorySample, HKCorrelation, HKQuantitySample, и HKWorkout объекты.

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

Демонстрационные запросы являются неизменными: свойства запроса установлены, когда это сначала создается. Они не могут измениться.

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

Вы создаете демонстрационный запрос путем вызова initWithSampleType:predicate:limit:sortDescriptors:resultsHandler: инициализатор. После того, как запрос инстанцируют, Вы выполняете его путем вызова медицинского хранилища executeQuery: метод. Этот метод выполняет запрос на анонимной очереди фоновых задач. Когда запрос завершен, он выполняет обработчик результатов на очереди фоновых задач. Как правило, Вы диспетчеризируете эти результаты назад основной очереди для обновления пользовательского интерфейса.

Перечисление 1 показывает, как создать запрос и обработать результаты. Этот код взят от AAPLJournalViewController.m файл в Адаптации: Сохраните и Получите Данные HealthKit.

Журнал перечисления 1Update

Swift

  • let calendar = NSCalendar.currentCalendar()
  • let now = NSDate()
  • let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: now)
  • let startDate = calendar.dateFromComponents(components)
  • let endDate = calendar.dateByAddingUnit(.CalendarUnitDay, value: 1, toDate: startDate, options: NSCalendarOptions(0))
  • let sampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDietaryEnergyConsumed)
  • let predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: .None)
  • let query = HKSampleQuery(sampleType: sampleType, predicate: predicate, limit: 0, sortDescriptors: nil) {
  • query, results, error in
  • if results {
  • println("An error occured fetching the user's tracked food. In your app, try to handle this gracefully. The error was: \(error.localizedDescripiton)");
  • abort();
  • }
  • dispatch_async(dispatch_get_main_queue()) {
  • foodItems.removeAllObjects()
  • for sample in results as [HKQuantitySample] {
  • var foodName = ""
  • if let foodType: AnyObject = sample.metadata[HKMetadataKeyFoodType] {
  • if let name = foodType as? String {
  • foodName = name
  • }
  • }
  • let joules = sample.quantity.doubleValueForUnit(HKUnit.jouleUnit())
  • let foodItem = AAPLFoodItem.foodItemWithName(foodName, joules: joules)
  • foodItems.addObject(foodItem)
  • }
  • tableView.reloadData()
  • }
  • }
  • healthStore.executeQuery(query)

Objective C

  • NSCalendar *calendar = [NSCalendar currentCalendar];
  • NSDate *now = [NSDate date];
  • NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
  • NSDate *startDate = [calendar dateFromComponents:components];
  • NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];
  • HKSampleType *sampleType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryEnergyConsumed];
  • NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionNone];
  • HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:sampleType predicate:predicate limit:0 sortDescriptors:nil resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
  • if (!results) {
  • NSLog(@"An error occured fetching the user's tracked food. In your app, try to handle this gracefully. The error was: %@.", error);
  • abort();
  • }
  • dispatch_async(dispatch_get_main_queue(), ^{
  • [self.foodItems removeAllObjects];
  • for (HKQuantitySample *sample in results) {
  • NSString *foodName = sample.metadata[HKMetadataKeyFoodType];
  • double joules = [sample.quantity doubleValueForUnit:[HKUnit jouleUnit]];
  • AAPLFoodItem *foodItem = [AAPLFoodItem foodItemWithName:foodName joules:joules];
  • [self.foodItems addObject:foodItem];
  • }
  • [self.tableView reloadData];
  • });
  • }];
  • [self.healthStore executeQuery:query];

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

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

Обработчик результатов запускается путем проверки, чтобы видеть, произошла ли ошибка. Если существует ошибка, она распечатывает сообщение журнала к консоли и аварийным прекращениям работы. Иначе, это диспетчеризирует назад основному потоку для обновления UI.

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

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

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

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

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

  • Инстанцирует и возвращает демонстрационный запрос.

    Объявление

    Swift

    init!(sampleType sampleType: HKSampleType!, predicate predicate: NSPredicate!, limit limit: Int, sortDescriptors sortDescriptors: [AnyObject]!, resultsHandler resultsHandler: ((HKSampleQuery!, [AnyObject]!, NSError!) -> Void)!)

    Objective C

    - (instancetype)initWithSampleType:(HKSampleType *)sampleType predicate:(NSPredicate *)predicate limit:(NSUInteger)limit sortDescriptors:(NSArray *)sortDescriptors resultsHandler:(void (^)(HKSampleQuery *query, NSArray *results, NSError *error))resultsHandler

    Параметры

    sampleType

    Тип выборки для поиска. Этот объект может быть экземпляром HKCategoryType, HKCorrelationType, HKQuantityType, или HKWorkoutType классы.

    predicate

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

    limit

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

    sortDescriptors

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

    resultsHandler

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

    Этот блок берет следующие параметры:

    query

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

    results

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

    error

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

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

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

    Обсуждение

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

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

    Objective C

    @import HealthKit;

    Swift

    import HealthKit

    Доступность

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

  • limit Свойство

    Максимальное количество выборок, которые возвращает этот запрос. (только для чтения)

    Объявление

    Swift

    var limit: Int { get }

    Objective C

    @property(readonly) NSUInteger limit

    Обсуждение

    Наборы значений этого свойства максимальное количество выборок, которые запрос возвращает после завершения.

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

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

    Objective C

    @import HealthKit;

    Swift

    import HealthKit

    Доступность

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

  • sortDescriptors Свойство

    Дескрипторы вида, указывающие порядок результатов, возвращенных этим запросом. (только для чтения)

    Объявление

    Swift

    var sortDescriptors: [AnyObject]! { get }

    Objective C

    @property(readonly, copy) NSArray *sortDescriptors

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

    Objective C

    @import HealthKit;

    Swift

    import HealthKit

    Доступность

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

  • Константа раньше ограничивала число результатов, возвращенных демонстрационным запросом.

    Объявление

    Swift

    var HKObjectQueryNoLimit: Int32 { get }

    Objective C

    #define HKObjectQueryNoLimit (0)

    Константы

    • HKObjectQueryNoLimit

      Запрос возвращает все выборки в хранилище HealthKit, соответствующие данный демонстрационный тип и предикат.

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