2015-11-05 42 views
0

所以我有我的ViewController代码中的一些错误和错误在我的应用程序。首先,在我行:startDate,endDate,并添加文本标签在ViewController

let predicate = HKQuery.predicateForSamplesWithStartDate(startDate,endDate: endDate ,options: .None) 

我得到以下错误:use of unresolved identifier 'endDate'

这很奇怪。是因为我没有把它们变成NSDate对象吗?我会怎么做呢?

至于我的第二个问题,它不完全是一个错误,我只是不知道该怎么做。我已将我的标签从故事板连接到我的视图控制器。我想获取我收集的数据,只需在标签的屏幕上打印即可。我知道如何在大多数情况下做到这一点,但我失去了在我目前的配置中如何做到这一点。我不希望用户按下按钮或任何东西,我只是希望它自动默认显示...任何帮助非常感谢!

我已经包括了我下面的所有代码:

import UIKit 
import HealthKit 

class ViewController: UIViewController { 

    @IBOutlet weak var displayData: UILabel! 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     // create store 

     let healthStore = HKHealthStore() 

     // create an object type to request an authorization for a specific category, here is SleepAnalysis 

     if let sleepType = HKObjectType.categoryTypeForIdentifier(HKCategoryTypeIdentifierSleepAnalysis) { 

      let setType = Set<HKSampleType>(arrayLiteral: sleepType) 
      healthStore.requestAuthorizationToShareTypes(setType, readTypes: setType, completion: { (success, error) -> Void in 
       // here is your code 
      }) 
     } 

     if let sleepType = HKObjectType.categoryTypeForIdentifier(HKCategoryTypeIdentifierSleepAnalysis) { 

      // we create a predicate to filter our data 
      let predicate = HKQuery.predicateForSamplesWithStartDate(startDate,endDate: endDate ,options: .None) 

      // I had a sortDescriptor to get the recent data first 

      let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false) 

      // we create our query with a block completion to execute 

      let query = HKSampleQuery(sampleType: sleepType, predicate: predicate, limit: 30, sortDescriptors: [sortDescriptor]) { (query, tmpResult, error) -> Void in 

回答

2

endDate未定义 - 你还没有真正建立,代表endDate变量 - 因此编译器告诉你。而且,startDate也是未定义的,即使编译器还没有告诉你。至少,您需要创建NSDate s。

let startDate = NSDate() 
let endDate = NSDate() 

更具体地说,您需要在您想要查询的范围内创建它们。

关于默认显示数据,只需在viewDidLoad中设置UILabel的文本即可。我假设你想设置这个文本来响应HealthKit查询?如果是这样,你仍然可以做,在viewDidLoad

因此,使用您的查询,需要将其提供给executeQueryhealthStore下面是一些代码,你可以用你贴什么用:

healthStore.executeQuery(HKSampleQuery(
    sampleType: sleepType, 
    predicate: predicate, 
    limit: 30, 
    sortDescriptors: [sortDescriptor], 
    resultsHandler: { (query: HKSampleQuery!, results: [AnyObject]!, err: NSError?) -> Void in 
     if err != nil { 
      // ERROR Occurred, handled it 
      println(err) 
      return 
     } 
     var labelText = "" 
     for result in results as [HKQuantitySample]! { 
      // SUCCESS, use results here 
      labelText += result 
     } 
     displayData.text = labelText 
    } 
)) 
+0

感谢真棒的答案!我会在哪里实施这个代码?我试着在我的第二条if语句之后直接添加它,但Xcode向我抛出错误,指出sleepType,predicate和sortDescriptor使用了未解析的标识符。我很确定这是因为我放置代码的位置超出了范围,但我不确定我会把它放在哪里。 –

+0

用该代码替换“let query ...”行,它应该可以工作。快速浏览似乎表明所有变量都在范围内。 –

相关问题