【问题标题】:Does HKAnchoredObjectQuery automatically cache anchor?HKAnchoredObjectQuery 会自动缓存锚点吗?
【发布时间】:2015-09-07 22:12:59
【问题描述】:

class reference 和任何可用的在线教程都没有提到应用程序运行之间的缓存锚点。

我想在应用程序运行之间查询数据,以便获得所有历史 HealthKit 条目。起初,我认为我需要将最后一个查询 NSDate 存储在 NSUserDefaults 中,并且在下一次应用程序运行时,我将点击这个值并将其设置为 startDateHKSampleQuery 但经过一些阅读后我来了这个很酷的东西叫做HKAnchoredObjectQuery,它应该为我处理这个缓存,所以每当我点击时,我只会得到新的条目。

这个类是自动存储锚点还是仅在应用程序运行时存储锚点,当应用程序终止时,所有内容都被清除,我又开始使用HKAnchoredObjectQueryNoAnchor

【问题讨论】:

    标签: ios healthkit hksamplequery


    【解决方案1】:

    您的应用必须自己存储 HKQueryAnchor。 HKAnchoredObjectQuery 无法在应用程序启动时为您缓存它 - HealthKit 怎么知道您出于相同目的执行相同的查询?

    【讨论】:

      【解决方案2】:

      在代码中做了一些实验之后,看起来这个 anchor 是一个常规的 Int (HKQueryAnchor (>=9.0) 并且 只有在应用程序处于前台
      如果您(像我一样)想在应用程序运行之间保留此值,则必须手动将其存储在 NSUserDefaults 中。

      我仍然不完全相信他们可以仅基于简单的 Int 值来关注这一点...对我来说更可靠的解决方案是手动存储上次查询执行的 NSDate 并基于此查询仅限此日期范围内的项目。
      另外一件可能有帮助的事情 - HKAnchoredObjectQuery 自动按升序对返回的数据进行排序。

      【讨论】:

      • 确实需要将锚点存储在 NSUserDefaults 之类的地方。结果自动按日期升序排序是不正确的。它们按锚定顺序排序。尝试将过去的样本添加到 HealthKit,您会看到它是 HKAnchoredObjectQuery 返回的下一个对象。
      • 此外,日期不是跟踪此类查询更改的可靠方法。整数锚点是一个单调递增的数字,旨在准确跟踪您的应用所见和未见的内容,而不管与样本相关的日期如何。
      • 好吧,但是整数有点短...我认为HealthKit 可能会达到它的极限,然后呢?
      • 整数足够大。为了让 HealthKit 用完锚点,需要创建大约 4,294,967,296 个样本(在 32 位设备上)。有了这么多的样本,性能会比锚点耗尽更快成为问题。
      猜你喜欢
      • 2010-12-17
      • 1970-01-01
      • 2015-05-06
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多