2015-09-07 3 views
1

Ни class reference, ни какой-либо учебник, доступный в Интернете, не говорит ничего о кеширование привязки между запусками приложений.HKAnchoredObjectQuery автоматически кэширует привязку?

Я хочу запросить данные между запусками приложений, поэтому я получаю все исторические записи HealthKit. Сначала я подумал, что мне нужно сохранить последний запрос NSDate в NSUserDefaults и в следующем приложении. Я просто удалю это значение и задаю его как startDate из HKSampleQuery, но после некоторого чтения я пришел на эту классную вещь под названием HKAnchoredObjectQuery, которая должна работайте с этим кэшированием для меня, поэтому всякий раз, когда я ударяю, я получаю только новые записи.

Этот класс автоматически сохраняет привязки или он просто хранит его при запуске приложения, а когда приложение завершается, все очищается, и я начинаю снова с HKAnchoredObjectQueryNoAnchor?

ответ

0

После выполнения некоторых экспериментов в коде это выглядит как этот якорь является регулярным Int (< 9.0) или HKQueryAnchor (> = 9.0) и он держит значение только тогда, когда приложение находится в froeground.
Если вы (как и я) хотите сохранить это значение между запусками приложений, вам придется его вручную хранить, например, в NSUserDefaults.

Я до сих пор не до конца уверен в том, что они могут держать глаз на это только на основе простого Int значения ... Более надежное решение для меня, чтобы вручную сохранить NSDate последнего выполнение запроса и на основе этого запроса деталей только от этот диапазон дат.
Дополнительная информация, которая может быть полезна - HKAnchoredObjectQuery автоматически сортирует возвращенные данные в порядке возрастания.

+0

Это правда, что вам нужно сохранить якорь в каком-то месте, например NSUserDefaults. Неверно, что результаты автоматически сортируются в порядке возрастания по дате. Они сортируются в порядке привязки. Попробуйте добавить образец в HealthKit из прошлого, и вы увидите, что это следующий объект, возвращаемый HKAnchoredObjectQuery. – Allan

+0

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

+0

Ну да, но целое число короткое ... Я думаю, что «HealthKit» может достичь предела и что позже? – cojoj

4

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