ios – 为HKCategoryTypeIdentifierSleepAnalysis查询HealthKit

前端之家收集整理的这篇文章主要介绍了ios – 为HKCategoryTypeIdentifierSleepAnalysis查询HealthKit前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经构建了一个导入睡眠样本的方法,但我无法让它在几小时内返回正确的值.

查询睡眠数据的方法如下所示:

  1. func updateHealthCategories() {
  2.  
  3. let categoryType = HKObjectType.categoryTypeForIdentifier(HKCategoryTypeIdentifierSleepAnalysis)
  4.  
  5. let start = NSDate(dateString:"2015-11-04")
  6. let end = NSDate(dateString:"2015-11-05")
  7.  
  8. let categorySample = HKCategorySample(type: categoryType!,value: HKCategoryValueSleepAnalysis.Asleep.rawValue,startDate: start,endDate: end)
  9.  
  10. self.houRSSleep = Double(categorySample.value)
  11.  
  12. print(categorySample.value)
  13. }

日期的格式如下:

  1. extension NSDate
  2. {
  3. convenience
  4. init(dateString:String) {
  5. let dateStringFormatter = NSDateFormatter()
  6. dateStringFormatter.dateFormat = "yyyy-MM-dd"
  7. dateStringFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
  8. let d = dateStringFormatter.dateFromString(dateString)!
  9. self.init(timeInterval:0,sinceDate:d)
  10. }
  11. }

我正在调用11月4日至5日的数据,其中包含以下数据:

但是,categorySample.value返回1而不是3.

解决方法

您要访问的值是类别样本值,HKCategoryType,而不是睡眠小时数.

HKCategoryTypeIdentifierSleepAnalysis的定义

  1. typedef enum : NSInteger {
  2. HKCategoryValueSleepAnalysisInBed,HKCategoryValueSleepAnalysisAsleep,} HKCategoryValueSleepAnalysis;

定义两个可能的值,0或1,其中值1与HKCategoryValueSleepAnalysisAsleep匹配.

让小时入睡需要设置HKSampleQuery.

代码看起来像这样:

  1. if let sleepType = HKObjectType.categoryTypeForIdentifier(HKCategoryTypeIdentifierSleepAnalysis) {
  2.  
  3. let predicate = HKQuery.predicateForSamplesWithStartDate(startDate,endDate: endDate,options: .None)
  4. let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierEndDate,ascending: false)
  5. let query = HKSampleQuery(sampleType: sleepType,predicate: predicate,limit: 30,sortDescriptors: [sortDescriptor]) { (query,tmpResult,error) -> Void in
  6. if let result = tmpResult {
  7. for item in result {
  8. if let sample = item as? HKCategorySample {
  9. let value = (sample.value == HKCategoryValueSleepAnalysis.InBed.rawValue) ? "InBed" : "Asleep"
  10. print("sleep: \(sample.startDate) \(sample.endDate) - source: \(sample.source.name) - value: \(value)")
  11. let seconds = sample.endDate.timeIntervalSinceDate(sample.startDate)
  12. let minutes = seconds/60
  13. let hours = minutes/60
  14. }
  15. }
  16. }
  17. }
  18.  
  19. healthStore.executeQuery(query)
  20. }

我从http://benoitpasquier.fr/sleep-healthkit/总结了这一点.

猜你在找的iOS相关文章