HKAnchoredObjectQuery
Оператор импорта
Swift
import HealthKit
Objective C
@import HealthKit;
Доступность
Доступный в iOS 8.0 и позже.
Запросы привязанного объекта обеспечивают простой способ искать новые данные в хранилище HealthKit. Запросы привязанного объекта возвращают значение привязки, соответствующее последней выборке, полученной тем запросом. Последующие запросы могут использовать эту привязку для ограничения их результатов только выборками, сохраненными после выборки, соответствующей привязке.
Запросы привязанного объекта являются неизменными: Их свойства установлены, когда они сначала создаются, и они не могут измениться.
Выполнение исходных запросов
Пример кода в Перечислении 1 создает и выполняет запрос привязанного объекта.
Swift
var anchorValue = Int(HKAnchoredObjectQueryNoAnchor)
if anchor != nil {
anchorValue = anchor!
}
let sampleType =
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
let query = HKAnchoredObjectQuery(type: sampleType,
predicate: nil,
anchor: anchorValue,
limit: Int(HKObjectQueryNoLimit)) {
query, results, newAnchor, error in
if error != nil {
// Perform proper error handling here...
println("*** An error occured while setting up the stepCount observer. \(error.localizedDescription) ***")
abort()
}
self.anchor = newAnchor;
for result in results {
if let sample = result as? HKQuantitySample {
self.addStepCountSample(sample)
}
}
}
healthStore.executeQuery(query)
Objective C
NSUInteger anchor = HKAnchoredObjectQueryNoAnchor;
if (self.anchorSet) {
anchor = self.anchor;
}
HKSampleType *sampleType =
[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
HKAnchoredObjectQuery *query =
[[HKAnchoredObjectQuery alloc]
initWithType:sampleType
predicate:nil
anchor:anchor
limit:HKObjectQueryNoLimit
completionHandler:^(HKAnchoredObjectQuery *query,
NSArray *results,
NSUInteger newAnchor,
NSError *error) {
if (error) {
// Perform proper error handling here...
NSLog(@"*** An error occured while performing the anchored object query. %@ ***",
error.localizedDescription);
abort();
}
self.anchor = newAnchor;
for (HKQuantitySample *sample in results) {
[self addStepCountSample:sample];
}
}];
[self.healthStore executeQuery:query];
В первый раз этот код выполнения, это создает запрос привязанного объекта с помощью HKAnchoredObjectQueryNoAnchor
значение. Этот запрос возвращает все выборки количества шага, которые в настоящее время находятся в хранилище HealthKit. На последующих выполнениях это использует привязку, возвращенную предыдущим запросом. Эти запросы возвращают только выборки количества шага, сохраненные начиная с предыдущего выполнения.
Выборка запускается путем проверки на допустимое значение привязки. Если это может найти допустимую привязку, это использует ту привязку. Иначе, это использует HKAnchoredObjectQueryNoAnchor
значение. Затем, это создает демонстрационный тип количества шага и затем создает запрос. Так как выборка интересуется всеми выборками количества шага, она не использует предикат или предел для фильтрации результатов.
Обработчик обратного вызова запускается путем проверки на ошибки. Если никакая ошибка не происходит, это сохраняет новое значение привязки и затем обрабатывает новые демонстрационные данные.
После того, как блок обработчика завершения определяется, запрос завершен. Пример кода выполняет этот запрос с помощью хранилища HealthKit.
-
init (type:predicate:anchor:limit:completionHandler:) - initWithType:predicate:anchor:limit:completionHandler:
Инициализирует новый запрос привязанного объекта.
Объявление
Swift
init!(type
type
: HKSampleType!, predicatepredicate
: NSPredicate!, anchoranchor
: Int, limitlimit
: Int, completionHandlerhandler
: ((HKAnchoredObjectQuery!, [AnyObject]!, Int, NSError!) -> Void)!)Objective C
- (instancetype)initWithType:(HKSampleType *)
type
predicate:(NSPredicate *)predicate
anchor:(NSUInteger)anchor
limit:(NSUInteger)limit
completionHandler:(void (^)(HKAnchoredObjectQuery *query, NSArray *results, NSUInteger newAnchor, NSError *error))handler
Параметры
type
Тип выборки для поиска. Этот запрос поддерживает все демонстрационные типы. В частности можно передать любой конкретный подкласс
HKSampleType
класс (HKQuantityType
,HKCategoryType
,HKWorkoutType
, иHKCorrelationType
классы).predicate
Предикат, фильтрующий выборки, возвращенные запросом. Передача
nil
получить все новые выборки указанного типа.anchor
Привязка, возвращенная предыдущим запросом привязанного объекта. Значение привязки соответствует последней выборке, возвращенной предыдущим запросом привязанного объекта. Новый запрос возвращает только объекты, более новые, чем та выборка.
limit
Максимальное количество выборок получено запросом. Получить все новые выборки, передачу
HKObjectQueryNoLimit
.handler
Блок, который вызывают, когда запрос заканчивает выполняться. Этот блок берет следующие параметры:
query
Ссылка на запрос, вызывая этот блок.
results
Массив, содержащий выборки, возвращенные этим запросом, или
nil
если произошла ошибка.newAnchor
Значение, соответствующее последней выборке в массиве результатов. Последующие запросы привязки могут использовать это значение для получения только выборок, сохраненных к хранилищу HealthKit, так как завершился этот запрос.
error
Если ошибка происходит, этот параметр содержит объект, описывающий ошибку; иначе, это
nil
.Возвращаемое значение
Недавно инициализированный объект запроса привязки.
Обсуждение
После инстанцирования запроса вызовите
HKHealthStore
классexecuteQuery:
метод для выполнения его. Запросы работают на анонимной очереди фоновых задач. Как только запрос завершен, обработчик выполняется на той же очереди фоновых задач (но не обязательно том же потоке).Оператор импорта
Objective C
@import HealthKit;
Swift
import HealthKit
Доступность
Доступный в iOS 8.0 и позже.
-
Константы, используемые при создании новых запросов привязанного объекта.
Объявление
Swift
var HKAnchoredObjectQueryNoAnchor: Int32 { get }
Objective C
#define HKAnchoredObjectQueryNoAnchor (0)
Константы
-
HKAnchoredObjectQueryNoAnchor
Используйте эту константу для определения запроса привязанного объекта, возвращающего все соответствующие выборки в настоящее время в хранилище HealthKit.
Используйте эту константу в первый раз, когда Вы выполняете запрос привязанного объекта. Получающийся запрос в настоящее время возвращает все соответствующие выборки в хранилище HealthKit. Для последующих запросов привязанного объекта используйте привязку, возвращенную предыдущим запросом. Получающийся запрос возвращает только выборки, добавленные к хранилищу HealthKit начиная с предыдущего запроса.
Доступный в iOS 8.0 и позже.
-