2016-05-20 24 views
1

我使用HKAnchoredObjectQuery和updateHandler來獲取多種類型的healthkit樣本數據,但它只返回「HKQuantityTypeIdentifierStepCount」數據而不是其他HKSampleTypes。以下是我正在使用的代碼。任何幫助將非常感激。Healthkit multiple HKAnchoredObjectQuery不返回所有樣本類型的數據

FUNC readHealthKitData(類型:HKSampleType){

let onAnchorQueryResults : ((HKAnchoredObjectQuery, [HKSample]?, [HKDeletedObject]?, HKQueryAnchor?, NSError?) -> Void)! = { 
     (query:HKAnchoredObjectQuery, addedObjects:[HKSample]?, deletedObjects:[HKDeletedObject]?, newAnchor:HKQueryAnchor?, nsError:NSError?) -> Void in 

     if (addedObjects?.count > 0) 
     { 

      // var addDict = [String : AnyObject]() 
      for obj in addedObjects! { 
       let hkValue = obj as? HKQuantitySample 
       if(hkValue?.UUID.UUIDString != nil){ 
        print("TypeName:",type.isEqual("HKQuantityTypeIdentifierHeartRate")) 
        switch type { 
        case HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!: 
         let val = (hkValue?.quantity.doubleValueForUnit(HKUnit(fromString: "count/min")))! 
         let uuid : String = (hkValue?.UUID.UUIDString)! 

        case HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!: 
         let val = (hkValue?.quantity.doubleValueForUnit(HKUnit.countUnit()))! 
         let uuid : String = (hkValue?.UUID.UUIDString)! 


        case HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!: 
         let val = ((hkValue?.quantity.doubleValueForUnit(HKUnit.gramUnit()))!/1000.0) 
         let uuid : String = (hkValue?.UUID.UUIDString)! 

        default: 
         break 

        } 

       } 
      } 

     } 

    } 

    let queryEndDate = NSDate() 
    print("Before Start: ") 
    print(self.queryStartDate) 
    let predicate: NSPredicate = HKAnchoredObjectQuery.predicateForSamplesWithStartDate(self.queryStartDate, endDate: queryEndDate, options: HKQueryOptions.None) 

    let anchoredQuery = HKAnchoredObjectQuery(type: type, predicate: predicate, anchor: hkAnchor, limit: 0, resultsHandler: onAnchorQueryResults) 
    anchoredQuery.updateHandler = onAnchorQueryResults 
    healthStore.executeQuery(anchoredQuery) 
    self.queryStartDate = queryEndDate 


}} 

回答

3

這是預期的。查詢的初始化程序接受一個類型參數只返回該類型的結果。您無法使用單個查詢查詢多種類型的樣本。

+0

感謝艾倫,所以我需要對每個樣本類型有多個查詢。我正在尋找一個簡單的方法,用較少的代碼。 – Chandan

+0

如果您有改進API的想法,您應該向Apple提交增強請求。另外,如果它是正確的,不要忘記接受這個答案。 – Allan