Ios 设置HKAnchoredObjectQuery以便我只接收自上次查询以来的更新?

Ios 设置HKAnchoredObjectQuery以便我只接收自上次查询以来的更新?,ios,swift,healthkit,Ios,Swift,Healthkit,我正在尝试设置一个HKAnchoredObjectQuery,它只提供上次我进行此查询时的结果,但我无法理解设置HKQueryAnchor的逻辑以及如何保持它?在中,它们不显示HKQueryAnchor的初始声明。我是否需要在本地存储我下载的最后一个示例的日期,并从该日期构建一个锚?下面的代码返回HealthKit中的每个示例 func updateWorkouts(completionHandler: @escaping () -> Void) { var anchor

我正在尝试设置一个
HKAnchoredObjectQuery
,它只提供上次我进行此查询时的结果,但我无法理解设置HKQueryAnchor的逻辑以及如何保持它?在中,它们不显示
HKQueryAnchor
的初始声明。我是否需要在本地存储我下载的最后一个示例的日期,并从该日期构建一个锚?下面的代码返回HealthKit中的每个示例

func updateWorkouts(completionHandler: @escaping () -> Void) {

        var anchor: HKQueryAnchor?

        let sampleType =  HKObjectType.workoutType()
        let workoutPredicate = HKQuery.predicateForWorkouts(with: .hockey)
        let sourcePredicate = HKQuery.predicateForObjects(from: HKSource.default()) //limit query to only this app
        let compound = NSCompoundPredicate(andPredicateWithSubpredicates: [workoutPredicate, sourcePredicate])

        let anchoredQuery = HKAnchoredObjectQuery(type: sampleType, predicate: compound, anchor: anchor, limit: HKObjectQueryNoLimit) { [unowned self] query, newSamples, deletedSamples, newAnchor, error in

            self.handleNewWorkouts(newWorkoutsAsSamples: newSamples!, deleted: deletedSamples!)

            anchor = newAnchor

            completionHandler()
        }
        healthStore.execute(anchoredQuery)


    }

初始化
HKAnchoredObjectQuery
时,您需要提供
nil
或从先前执行的查询中收到的锚对象。您不能自己直接构建
HKQueryAnchor
。要在应用程序启动之间持久化锚点,可以使用
NSKeyedArchiver
在持久存储中对其进行编码。将结果编码的
NSData
存储在
NSUserDefaults

中是很常见的。谢谢Allan,我使用
UserDefaults
进行了设置,效果很好。