HKAnchoredObjectQuery автоматически кеширует привязку?
Ни ссылка на класс, ни какое-либо учебное пособие, доступное онлайн, ничего не говорят о кешировании якорей между запусками приложения.
Я хочу запрашивать данные между запусками приложения, чтобы получить все исторические данные HealthKit
записей. Сначала я подумал, что мне нужно сохранить последний запрос NSDate
в NSUserDefaults
и при следующем запуске приложения я просто нажму это значение и установить его как startDate
из HKSampleQuery
но после некоторого чтения я пришел к этой классной вещи под названием HKAnchoredObjectQuery
который должен обрабатывать это кэширование для меня, поэтому всякий раз, когда я нажимаю, я получаю только новые записи.
Сохраняет ли этот класс якоря автоматически или просто сохраняет его при запуске приложения, и когда приложение завершается, все очищается, и я снова начинаю с HKAnchoredObjectQueryNoAnchor
?
2 ответа
Ваше приложение должно хранить сам HKQueryAnchor. HKAnchoredObjectQuery не может кэшировать его при каждом запуске приложения - как HealthKit узнает, что вы выполняли один и тот же запрос для той же цели?
После выполнения некоторых экспериментов в коде, похоже, что этот якорь является регулярным Int
(<9,0) или HKQueryAnchor
(>=9.0), и он сохраняет значение только тогда, когда приложение находится на заднем плане.
Если вы (как и я) хотите сохранить это значение между запусками приложения, вам придется сохранить его вручную, например, в NSUserDefaults
,
Я до сих пор не совсем уверен, что они могут следить за этим только на основе простых Int
ценность... Более надежное решение для меня, чтобы вручную хранить NSDate
последнего выполнения запроса и на основе этого элемента запроса только из этого диапазона дат.
Еще одна вещь, которая может быть полезна - HKAnchoredObjectQuery
автоматически сортирует возвращаемые данные в порядке возрастания.