【发布时间】:2016-07-20 17:12:09
【问题描述】:
我需要将我的应用程序的数据库与 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)
}
}
两个问题:
我不知道如何持久化 HKQueryAnchor,因为 iOS 8 不支持它。我应该将持久化变量更新为查询处理程序返回的新锚对象。如果我能以某种方式将它转换为 Int,我可以将它存储为类变量,但我不知道如何。
已弃用的 HKAnchoredObjectQuery 初始化程序使用不返回已删除对象的处理程序。这是否意味着我无法在 iOS 8 中跟踪已删除的 HKSamples?
【问题讨论】: