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 inif 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:sampleTypepredicate:nilanchor:anchorlimit:HKObjectQueryNoLimitcompletionHandler:^(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!(typetype: HKSampleType!, predicatepredicate: NSPredicate!, anchoranchor: Int, limitlimit: Int, completionHandlerhandler: ((HKAnchoredObjectQuery!, [AnyObject]!, Int, NSError!) -> Void)!)Objective C
- (instancetype)initWithType:(HKSampleType *)typepredicate:(NSPredicate *)predicateanchor:(NSUInteger)anchorlimit:(NSUInteger)limitcompletionHandler:(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 и позже.
-
