HKAnchoredObjectQuery автоматически кеширует привязку?

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

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

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

2 ответа

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

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

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

Другие вопросы по тегам