ios - 开始日期、结束日期以及在 ViewController 中向标签添加文本

标签 ios swift uiviewcontroller healthkit

因此,我的应用程序中的 ViewController 代码存在一些缺陷和错误。首先,在我的行中:

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

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

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

至于我的第二个问题,它不完全是一个错误,我只是不知道该怎么做。我已将 Storyboard 中的标签连接到我的 View Controller 中。我想让我收集的数据简单地打印到标签中的屏幕上。我知道在大多数情况下如何执行此操作,但我不知道如何在当前配置中执行此操作。我不希望用户按下按钮或任何东西,我只是希望它默认自动显示...非常感谢任何帮助!!!

我在下面包含了我的所有代码:

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 也是未定义的,即使编译器还没有告诉您。至少,您需要创建 NSDate

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

关于ios - 开始日期、结束日期以及在 ViewController 中向标签添加文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33545855/

相关文章:

ios - 核心数据关系映射 : Double Quotes in Value Expression are automatically turned into single quotes

快速编码设计

ios - “无法安装约束”,原因 : 'No common superview between views

swift - 对成员 'buildBlock()' 的模糊引用

ios - 如何使用 Storyboard设置条件初始 View Controller

ios - 尝试使用推送通知创建Apple供应配置文件

ios - 在 iOS 8 中,Tabbar 的 View Controller 在更改方向时重新加载

android - 真正的开源跨平台移动开发工具包

swift - 如何使用 Swift 在 MVC 中避免臃肿的 ViewController?

ios - swift 如何通过关闭当前 View Controller 将数据推送到其他 View ?