HKObserverQuery 无法在 iPhone 上运行

Posted

技术标签:

【中文标题】HKObserverQuery 无法在 iPhone 上运行【英文标题】:HKObserverQuery cannot work on iPhone 【发布时间】:2016-04-10 10:56:11 【问题描述】:

我想立即从 Apple Watch 收集心率数据到 iPhone,但即使我关注Apple's document,我发现无法创建和更新 HKAnchorObjectQuery(在 HKObserverQuery 中)。

此外,HKObserverQuery 仅在开始执行应用程序时有效。

我已经尝试了 2 周,没有任何想法......

代码如下:

func createHeartRateStreamingQuery(workoutStartDate: NSDate) -> HKQuery?

            let sampleType =  HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!


            let query = HKObserverQuery(sampleType: sampleType, predicate: nil) 
                query, completionHandler, error in

                if error != nil 
                    // Perform Proper Error Handling Here...
                    print("*** An error occurred while setting up the observer. ***")
                    abort()
                else
                    print("sampleType initiated: ",sampleType)
                

                let anchoredQuery = HKAnchoredObjectQuery(type: sampleType, predicate: nil, anchor: self.anchor, limit: Int(HKObjectQueryNoLimit))  (query1, sampleObjects, deletedObjects, newAnchor, error) -> Void in
                print("anchored query initiated!")
                guard let newAnchor = newAnchor
                    else return
                self.anchor = newAnchor
                self.updateHeartRate(sampleObjects) //use to display the heart rate data
            

                anchoredQuery.updateHandler = (query1, samples, deleteObjects, newAnchor, error) -> Void in
                    self.anchor = newAnchor!
                    self.updateHeartRate(samples) //use to display the heart rate data
                    print("anchored query updating!")
                

                completionHandler()
            

            return query
        

     let query = createHeartRateStreamingQuery()
     healthStore.executeQuery(query)

期待您的回复!

Here's我的另一个与此相关的问题。

【问题讨论】:

【参考方案1】:

您不能在 HKObserverQuery 中使用 HKSampleQuery。 HKObserverQuery 的 updateHandler。观察者查询的处理程序可以在后台模式下执行,但示例查询之一不能在后台模式下执行。

【讨论】:

以上是关于HKObserverQuery 无法在 iPhone 上运行的主要内容,如果未能解决你的问题,请参考以下文章

HKObserverQuery 仅在应用程序重新打开时运行

从 HKObserverQuery 获取结果

iOS : HKObserverQuery 的后台更新completionHandler 的使用

HKObserverQuery 连续两次随机调用

HealthKit HKObserverQuery 没有持续触发

添加新数据并设置 hkObserverQuery 时,HealthKit 不启动应用程序