如何解决无法从Apple HealthKit访问Active Energy的汇总日值
我已经创建了一个从HealthKit提取有功电能数据的函数。但是,如果我尝试获取每天有多个有功电能记录的1年记录,则该应用程序会挂起,并且在某些情况下,应用程序确实崩溃了,并且我没有任何数据。
我找不到其他方法可以从Apple HealthKit访问Active Energy的汇总日值。
下面是我从HealthKit获取有功电能的代码。
func getActiveEnergy(startDate : Date) {
var startingDate = startDate
HealthKitSetupManager.getActiveEnergy(date: startDate,withSuccess: { (isSuccess,error) in
if isSuccess {
print("Active Energy Fetch")
}
startingDate = NSCalendar.current.date(byAdding: .day,value: 1,to: startDate) ?? Date()
if startingDate <= Date() {
self.getActiveEnergy(startDate: startingDate)
} else {
self.getSickNumber(startDate : self.globalDate)
}
})
}
HealthKitSetupManager.swift
class func getActiveEnergy(date:Date,withSuccess: @escaping(Bool,String?) -> Void) {
let healthKitStore = HKHealthStore()
if let energyType = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.activeEnergyBurned) {
let calendar = NSCalendar.current
var components = DateComponents()
components.day = 1
let eDateString = date.getFormattedString(format: DateFormateString.MM_dd_yyyy)
let eDate = eDateString.getFormattedDate(inFormate: DateFormateString.MM_dd_yyyy) ?? Date()
let endDate = calendar.date(byAdding: components,to: eDate) ?? Date()
let predicate = HKQuery.predicateForSamples(withStart: date,end: endDate,options: .strictStartDate)
let updateHandler = HKStatisticsQuery(quantityType: energyType,quantitySamplePredicate: predicate,options: .cumulativeSum) { (query,sample,error) -> Void in
if error != nil {
withSuccess(false,error?.localizedDescription ?? "")
return
}
if let sample = sample {
let energy = sample.sumQuantity()?.doubleValue(for: HKUnit.kilocalorie()) ?? 0.0
print(endDate,"->",energy)
withSuccess(true,nil)
return
} else {
withSuccess(false,nil)
return
}
}
healthKitStore.execute(updateHandler)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。