2016-05-14 14 views
0

この質問は尋ねられましたが、本当に答えられていません。私はこのようなスレッドから試しました: Heart Rate With Apple's HealthkithealthKit Heartrateのデータを読むには?

これをObjective-CからSwiftに変換しようとしましたが動作しませんでした。

私の質問は、健康診断キットから心拍数データを読み取る最良の方法は何ですか。私は、心拍数の測定を開始した時点からその心拍数の測定値をすべて読み取ることができるようにしたいと思います。この測定値の時間/日のスタンプを見ることができるようにしたいと考えています。

私はここで許可を求め:ここ

import Foundation 
import UIKit 
import HealthKit 

class HealthKitManager: NSObject { 

static let healthKitStore = HKHealthStore() 

static func authorizeHealthKit() { 

    let healthKitTypes: Set = [ 
     HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!, 
    ] 

    healthKitStore.requestAuthorizationToShareTypes(healthKitTypes, 
                readTypes: healthKitTypes) { _, _ in } 
    } 
} 

は、今の私の見解コントローラのコードは、(私はこれが動作しない理由はわからない)です:

import UIKit 
import HealthKit 

class ViewController: UIViewController { 

let health: HKHealthStore = HKHealthStore() 
let heartRateUnit:HKUnit = HKUnit(fromString: "count/min") 
let heartRateType:HKQuantityType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)! 
var heartRateQuery:HKQuery? 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

    @IBAction func authorizeTapped(sender: AnyObject) { 
    print("button tapped") 
    self.createStreamingQuery() 
    HealthKitManager.authorizeHealthKit() 

} 


func createStreamingQuery() -> HKQuery 
{ 
    let queryPredicate = HKQuery.predicateForSamplesWithStartDate(NSDate(), endDate: nil, options: .None) 

    let query:HKAnchoredObjectQuery = HKAnchoredObjectQuery(type: self.heartRateType, predicate: queryPredicate, anchor: nil, limit: Int(HKObjectQueryNoLimit)) 
    { (query:HKAnchoredObjectQuery, samples:[HKSample]?, deletedObjects:[HKDeletedObject]?, anchor:HKQueryAnchor?, error:NSError?) -> Void in 

     if let errorFound:NSError = error 
     { 
      print("query error: \(errorFound.localizedDescription)") 
     } 
     else 
     { 
      //printing heart rate 
      if let samples = samples as? [HKQuantitySample] 
      { 
       if let quantity = samples.last?.quantity 
       { 
        print("\(quantity.doubleValueForUnit(self.heartRateUnit))") 
       } 
      } 
     } 
    } 

    query.updateHandler = 
     { (query:HKAnchoredObjectQuery, samples:[HKSample]?, deletedObjects:[HKDeletedObject]?, anchor:HKQueryAnchor?, error:NSError?) -> Void in 

      if let errorFound:NSError = error 
      { 
       print("query-handler error : \(errorFound.localizedDescription)") 
      } 
      else 
      { 
       //printing heart rate 
       if let samples = samples as? [HKQuantitySample] 
       { 
        if let quantity = samples.last?.quantity 
        { 
         print("\(quantity.doubleValueForUnit(self.heartRateUnit))") 
        } 
       } 
      }//eo-non_error 
    }//eo-query-handler 

    return query 
} 


} 

私はできませんコンソールに印刷するものを手に入れてください。これは本当に必要なものです。

また、このコードは宿題、個人的/専門的なプロジェクトなどには向いていません。その楽しいために/知って、このコードの大部分は私が試したものであり、フローや他のフォーラムよりも複数のスタックを見ていることがわかりました。

+0

'createStreamingQuery'関数を実際に実行しましたか? – jtbandes

+0

私はやった、何もコンソールに印刷された、なぜか分からない。 – dnaland

+0

ヘルスストアでexecuteQueryを使用しましたか? – jtbandes

答えて

0

実際にクエリを実行する必要があります。

let query = self.createStreamingQuery() 
self.health.executeQuery(query) 
+0

ありがとうございます!もう1つ、今ではメモリアドレスが印刷されていますが、これをどのように読み取り可能なデータに変更できますか? – dnaland

+0

@dnaland申し訳ありませんが、私はあなたが言っていることを理解していませんでした。明確にしていただけますか? – penatheboss

+0

私は、コードにこのコンソールに出力されているものです実行してみてください。 警告:任意のObjective-をロードできませんでしたがCクラス情報。これにより利用可能な型情報の品質が大幅に低下します。 をデータの読み込みに変換するにはどうすればよいですか? – dnaland