如何从查询中获取信息
Posted
技术标签:
【中文标题】如何从查询中获取信息【英文标题】:how to get the information out of the query 【发布时间】:2015-08-17 16:35:48 【问题描述】:我创建了一个全局变量来存储信息
var stepsCount:Float = 0
并用它来存储查询中的步数
let stepsCountQuery = HKStatisticsQuery(quantityType: stepsCountType,quantitySamplePredicate: predicate, options: .CumulativeSum, completionHandler:
(query, results, error) in
if results == nil
print(error)
else
let info = results!.sumQuantity()
if info == nil
print("no information available")
else
stepsCount = Float(info!.doubleValueForUnit(HKUnit.countUnit()))
)
但是在原谅查询时变量似乎没有改变 有什么想法吗??
【问题讨论】:
查询真的被执行了吗?完成处理程序真的被调用了吗? 是的,这是因为我试图调用一个影响 UI 的函数(在查询内部)并且它工作但由于某种原因它无法更改此变量 您是否尝试过在 else 中进行断点以查看info!.doubleValueForUnit(HKUnit.countUnit())
返回的内容?
是的,我做到了,它完美地获得了正确的数字
你在哪里检查stepCount的值?它是从完成块内触发的吗?
【参考方案1】:
你的完成块应该看起来更像这样:
let stepsCountQuery = HKStatisticsQuery(quantityType: stepsCountType,quantitySamplePredicate: predicate, options: .CumulativeSum, completionHandler:
(query, results, error) in
if results == nil
print(error)
else
let info = results!.sumQuantity()
if info == nil
print("no information available")
else
stepsCount = Float(info!.doubleValueForUnit(HKUnit.countUnit()))
dispatch_async(dispatch_get_main_queue(),
stepsTracker.setProgress(stepsCount/1300 , animated: true)
)
)
【讨论】:
我应该把它放在 viewdidload 函数中吗? 这可能是放置它的好地方。以上是关于如何从查询中获取信息的主要内容,如果未能解决你的问题,请参考以下文章