startDate,endDate,以及在ViewController中向标签添加文本

时间:2015-11-05 13:30:31

标签: ios swift uiviewcontroller health-kit

所以我的应用程序中的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

1 个答案:

答案 0 :(得分:2)

endDate未定义 - 您实际上并未创建表示endDate的变量 - 因此编译器会告诉您。而且,startDate也是未定义的,即使编译器还没有告诉你。至少,您需要创建NSDate s。

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

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

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

中执行此操作

因此,要使用您的查询,需要在executeQuery上向healthStore提供此问题。这里有一些代码可以与您发布的内容一起使用:

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
    }
))