首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以渐进的方式使用健康工具包示例查询

如何以渐进的方式使用健康工具包示例查询
EN

Stack Overflow用户
提问于 2015-10-14 16:56:09
回答 1查看 707关注 0票数 2

我非常希望执行HKSampleQuery的结果。但是,在执行查询之后,我总是无法获得结果。

我的情况如下(错误处理代码被删除):

代码语言:javascript
复制
let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: false)

// get the latest step count sample
let stepSampleQuery: HKSampleQuery = HKSampleQuery(sampleType: (stepCountQty)!,
    predicate: nil,
    limit: 1,
    sortDescriptors: [sortDescriptor]) {
        (query, results, error) -> Void in

        if let result = results as? [HKQuantitySample] {
            // result[0] is the sample what I want
            self.lastStepDate = result[0].startDate
            print("readLastStep: ", self.lastStepDate)
        }
}
self.healthStore.executeQuery(query)
// now, I want to use the "self.lastStepDate"
// But, I cannot get the appropriate value of the variable.

我不认为代码是逐步运行的。resultHandler of HKSampleQuery什么时候运行?在使用查询的结果之前,我非常希望运行处理程序代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-14 20:45:23

resultsHandler运行记录在HKSampleQuery参考中时

实例化查询后,调用HKHealthStore类的executeQuery:方法来运行该查询。查询在匿名后台队列上运行。一旦查询完成,结果处理程序就会在后台队列上执行。通常将这些结果分派到主队列以更新用户界面。

由于查询是异步执行的,因此在响应被调用的resultsHandler时,应该执行依赖于查询结果的工作。例如,您可以执行以下操作:

代码语言:javascript
复制
// get the latest step count sample
let stepSampleQuery: HKSampleQuery = HKSampleQuery(sampleType: (stepCountQty)!,
    predicate: nil,
    limit: 1,
    sortDescriptors: [sortDescriptor]) {
        (query, results, error) -> Void in

        if let result = results as? [HKQuantitySample] {
            // result[0] is the sample what I want
            dispatch_async(dispatch_get_main_queue()) {
               self.lastStepDate = result[0].startDate
               print("readLastStep: ", self.lastStepDate)

               self.doSomethingWithLastStepDate()
            }
        }
}
self.healthStore.executeQuery(query)

注意,由于在后台队列上调用了处理程序,所以我在主队列上完成了与lastStepDate相关的工作,以避免同步问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33131302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档