2016-05-20 3 views
1

updateHandlerでHKAnchoredObjectQueryを使用して複数のタイプのヘルスキットサンプルデータを取得していますが、他のHKSampleTypesではなく「HKQuantityTypeIdentifierStepCount」のデータのみを返します。以下は私が使用しているコードです。どんな助けでも大歓迎です。 readHealthKitData FUNCHealthkit複数のHKAnchoredObjectQueryがすべてのサンプルタイプのデータを返さない

は(タイプ: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

これは予想されます。クエリの初期化子は型パラメータを受け取り、その型の結果のみを返します。 1つのクエリで複数のタイプのサンプルをクエリすることはできません。

+0

ありがとうございましたAllan、私はサンプルの種類ごとに複数のクエリを持つ必要があります。私は、より少ないコードで簡単な方法を探していました。 – Chandan

+0

改善されたAPIのアイデアがある場合は、アップルで強化リクエストを提出する必要があります。また、正しい場合は、この回答を受け入れることを忘れないでください。 – Allan

関連する問題