gpt4 book ai didi

ios - HealthKit 使用回退方法锚定查询?

转载 作者:行者123 更新时间:2023-11-28 12:46:36 24 4
gpt4 key购买 nike

我需要将我的应用程序的数据库与 HealthKit 同步,我目前正在使用 HKAnchoredObjectQuery 来仅接收最近的数据。我的部署目标是 iOS 8.0,但我想实现一个后备方法以更好地支持 iOS 9.0+。这是当前代码:

func synchronize(sampleType: HKSampleType) {

if #available(iOS 9.0, *) {

let queryAnchor = HKQueryAnchor(fromValue: self.anchor)
let resultsHandler: (HKAnchoredObjectQuery, [HKSample]?, [HKDeletedObject]?, HKQueryAnchor?, NSError?) -> Void = {
query, newSamples, deletedSamples, newAnchor, error in

// Handle results here
// TODO: QueryAnchor should persist in order to receive only new data changes!
}

let query = HKAnchoredObjectQuery(type: sampleType,
predicate: nil,
anchor: queryAnchor,
limit: HKObjectQueryNoLimit,
resultsHandler: resultsHandler)

healthKitStore.executeQuery(query)

} else {

// Fallback on earlier versions
let completionHandler: (HKAnchoredObjectQuery, [HKSample]?, Int, NSError?) -> Void = {
query, results, newAnchor, error in

// Handle results here
self.anchor = newAnchor
}

let query = HKAnchoredObjectQuery(type: sampleType,
predicate: nil,
anchor: self.anchor,
limit: HKObjectQueryNoLimit,
completionHandler: completionHandler)

healthKitStore.executeQuery(query)
}
}

两个问题:

  1. 我不知道如何保留 HKQueryAnchor,因为 iOS 8 不支持它。我应该将持久变量更新为查询处理程序返回的新 anchor 对象。如果我能以某种方式将它转换为 Int,我可以将它存储为类变量,但我不知道如何。

  2. 已弃用的 HKAnchoredObjectQuery 初始化程序使用了一个不返回已删除对象的处理程序。这是否意味着我无法在 iOS 8 中跟踪已删除的 HKSamples?

最佳答案

关于第一个问题,HKQueryAnchor 是在 iOS 9 上引入的,实际上在 iOS 8 上不可用。但是,阅读 documentation它产生它符合 NSSecureCoding 这意味着您可以将它存储在用户默认值中以实现持久性。因此,您可以在 iOS 9 上管理包含相关类型标识符的键和相应 HKQueryAnchor 的值的字典,而在 iOS 8 上使用 NSNumber 管理相同的列表> 包含 anchor 值。

为了向后兼容,您可以使用 HKQueryAnchoranchorFromValue: 类方法将旧 anchor 值转换为新类。

关于您的第二个问题,据我所知,在 iOS 8 上没有一种直接跟踪已删除 HKSamples 的方法。您可以了解更多关于在 session 203 of WWDC2015 中的 iOS 9 上执行此操作

关于ios - HealthKit 使用回退方法锚定查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37877971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com