在 ViewController 中向标签添加文本

startDate, endDate, and adding text to label in ViewController

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

endDate 是未定义的——你实际上没有创建一个代表 endDate 的变量——因此编译器告诉你。而且,startDate 也是未定义的,即使编译器还没有告诉你。至少,您需要创建 NSDates.

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

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

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

中执行此操作

因此,要使用您的查询,需要在 healthStore 将其提供给 executeQuery 以下是您可以与您发布的内容一起使用的一些代码:

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