Mat*_*tio 3 ios healthkit hksamplequery
我有一个场景,我需要从HealthKit中检索多组数据 - 体温,体重和血压.在我可以继续处理之前,我需要全部3,因为它们最终将以PDF格式结束.
我的天真第一种方法是运行一种,然后在HKSampleQuery的resultsHandler中调用第二种方法,然后在结果中调用第三种方法.感觉有点 - 我不知道 - 感觉我错过了什么.
是否有更好的方法或天真的方法是否合理?
您将需要使用 GCD 调度组。
首先为主线程设置一个全局变量
var GlobalMainQueue: dispatch_queue_t {
return dispatch_get_main_queue()
}
Run Code Online (Sandbox Code Playgroud)
接下来,创建调度组:
let queryGroup = dispatch_group_create()
Run Code Online (Sandbox Code Playgroud)
在执行查询之前,调用:
dispatch_group_enter(queryGroup)
Run Code Online (Sandbox Code Playgroud)
查询执行后,调用:
dispatch_group_leave(queryGroup)
Run Code Online (Sandbox Code Playgroud)
然后,处理您的完成代码:
dispatch_group_notify(queryGroup, GlobalMainQueue) {
// completion code here
}
Run Code Online (Sandbox Code Playgroud)
您应该尝试并行运行查询以获得更好的性能。在每个的完成处理程序中,调用一个公共函数来记录查询已完成。在该通用函数中,当您确定所有查询均已完成时,您可以继续下一步。
跟踪公共函数中查询完成情况的一种简单方法是使用计数器,要么从零向上计数到查询数量,要么从总查询数量向下计数到零。
由于 HealthKit 查询处理程序是在匿名后台调度队列上调用的,因此请确保同步对计数器的访问,方法是使用锁保护计数器或修改您控制的串行调度队列(例如主队列)上的计数器。
| 归档时间: |
|
| 查看次数: |
1434 次 |
| 最近记录: |