Swift HealthKit UpdateQuery 只被调用一次

Posted

技术标签:

【中文标题】Swift HealthKit UpdateQuery 只被调用一次【英文标题】:Swift HealthKit UpdateQuery only getting called once 【发布时间】:2020-06-03 01:18:35 【问题描述】:

我目前正在开展一个项目,我想在每次心率变化时从 Health Kit 中获取心率!我也尝试过使用 Timer,但结果是一样的。

它最多被调用 2 次并且永远不会再改变结果。另外,任何有 Swift 经验的人都可以告诉我,如果我想获得最大脉冲,HKStatisticsQuery 是一个不错的选择吗?

最后这是我的代码,我不知道我做错了什么。另外,对于我是使用 Swift 编写程序的初学者的业余代码,我真的很抱歉。

func createHeartRateStreamingQuery() -> HKQuery? 
    guard let heartRateType: HKQuantityType = HKQuantityType.quantityType(forIdentifier: .heartRate) else 
        return nil
    
    let predicate = HKQuery.predicateForSamples(withStart: nil, end: nil,options: .strictEndDate)
    let heartRateQuery = HKAnchoredObjectQuery(type: heartRateType, predicate: predicate, anchor: nil, limit: HKObjectQueryNoLimit)  (query, sampleObjects, deletedObjects, newAnchor, error) in

        guard let newAnchor = newAnchor,
            let sampleObjects = sampleObjects else 
                return
        
        self.anchor = newAnchor
        self.heartRateDelegate?.heartRateUpdated(heartRateSamples: sampleObjects)
    
    heartRateQuery.updateHandler = (query, sampleObjects, deletedObjects, newAnchor, error) -> Void in

        guard let newAnchor = newAnchor,
            let sampleObjects = sampleObjects else 
                return
        
        self.anchor = newAnchor
        self.heartRateDelegate?.heartRateUpdated(heartRateSamples: sampleObjects)
    
    return heartRateQuery

【问题讨论】:

【参考方案1】:

经过研究,我得出的结论是,仅使用您的 iPhone 永远不会让您接近实时心率检查,并且 updateHandler 工作得非常好。 iPhone 的 HealthKit 数据库仅在您退出并重新进入您的应用或锻炼结束后才会更新。

【讨论】:

以上是关于Swift HealthKit UpdateQuery 只被调用一次的主要内容,如果未能解决你的问题,请参考以下文章

HealthKit 仅在 Swift 2.0 中启动一次

使用 Swift 从 HealthKit 读取日期间隔的步骤

从 swift 1.2 迁移后 swift2 中的 healthKit 错误

从 swift 1.2 迁移后 swift2 中的 healthKit 错误

如何在 swift 中使用 HealthKit 获得步行和跑步距离

带有 Swift 的 HealthKit 中用于 HKBloodGlucose 的 HKUnit