2016-05-20 2 views
1

Ich verwende HKAnchoredObjectQuery mit UpdateHandler, um mehrere Typen von HealthKit Beispieldaten zu erhalten, aber es gibt Daten nur für "HKQuantityTypeIdentifierStepCount" nicht für andere HKSampleTypes. Unten ist der Code, den ich verwende. Jede Hilfe würde sehr geschätzt werden.HealthKit mehrere HKAnchoredObjectQuery nicht Daten für alle Beispieltypen

func readHealthKitData (Typ: 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 


}} 

Antwort

3

Dies ist zu erwarten. Der Initialisierer der Abfrage benötigt einen Typparameter, der nur Ergebnisse dieses Typs zurückgibt. Sie können nicht mehrere Typen von Beispielen mit einer einzelnen Abfrage abfragen.

+0

Dank Allan, so muss ich mehrere Abfragen für jeden der Probentypen haben. Ich war auf der Suche nach einem einfachen Weg mit weniger Code. – Chandan

+0

Wenn Sie eine Idee für eine verbesserte API haben, sollten Sie eine Verbesserungsanfrage bei Apple einreichen. Vergessen Sie auch nicht, diese Antwort zu akzeptieren, wenn sie korrekt ist. – Allan

Verwandte Themen