2015-11-08 77 views
1

我試着下面的代碼從healthapp讀取數據,但我得到的結果爲零值,也錯誤無效的HKObjectType HKQuantityTypeIdentifierDistanceWalkingRunning for keyPath workoutType。如何在healthkit中讀取HKWorkoutActivityType.Running?

Mac版:10.10.5 的Xcode版本:7.1

let distanceType = 
     HKObjectType.quantityTypeForIdentifier(
      HKQuantityTypeIdentifierDistanceWalkingRunning) 

     let workoutPredicate = HKQuery.predicateForWorkoutsWithWorkoutActivityType(HKWorkoutActivityType.Running) 

     let startDateSort = 
     NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true) 

     let query = HKSampleQuery(sampleType: distanceType!, predicate: workoutPredicate, 
      limit: 0, sortDescriptors: [startDateSort]) { 
       (sampleQuery, results, error) -> Void in 

       if let distanceSamples = results as? [HKQuantitySample] { 

        // process the detailed samples... 

       } 
       else { 
        // Perform proper error handling here... 
        print("*** An error occurred while adding a sample to " + 
         "the workout: \(error!.localizedDescription)") 

        abort() 
       } 
     } 

       // Execute the query 
     healthManager.healthKitStore.executeQuery(query) 

下面的代碼來訪問healthkit數據

// 1. Set the types you want to read from HK Store 
     let typeOfRead = [HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDietaryEnergyConsumed)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!, 
      HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!, 
      HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex)!, 
      HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBloodType)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierOxygenSaturation)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodPressureDiastolic)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodPressureSystolic)!] 

     let typeOfReads = NSSet(array: typeOfRead) 

     // 2. Set the types you want to write to HK Store 

     let typeOfWrite = [ 

      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDietaryEnergyConsumed)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!, 
      HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)! 

     ] 

     let typeOfWrites = NSSet(array: typeOfWrite) 

回答

1

使用本:

let query = HKSampleQuery(sampleType: HKWorkoutType.workoutType(), predicate: workoutPredicate, 
     limit: 0, sortDescriptors: [startDateSort]) { 
    // ... 
} 

跟你說sampleType你想選擇鍛鍊。謂詞決定了哪些鍛鍊屬性用於選擇。

您告訴healthSore選擇運行樣本並提供鍛鍊屬性。這並不合適。