HKAnchoredObjectQueryの仕組みを理解しようとしています。ワークアウトが開始され、ワークアウトセッションの状態が実行中に変わると、次の関数を呼び出してクエリを実行し、ハートビート値を取得します。なぜHKSample配列には、HKAnchoredObjectQueryの値が1つでもなく、述語もアンカーもありません。
func createHeartRateStreamingQuery() {
guard let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate) else { return nil }
var heartRateQuery : HKAnchoredObjectQuery? = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: nil, limit: Int(HKObjectQueryNoLimit)) { (query, sampleObjects, deletedObjects, newAnchor, error) -> Void in
}
heartRateQuery!.updateHandler = {(query, samples, deleteObjects, newAnchor, error) -> Void in
{
//Samples only have 1 entry which is the most recent reading.
}
}
self.healthStore.executeQuery(heartRateQuery!)
}
HeartRateQueryの更新ハンドラが完了ハンドラ内のすべての2〜3秒とサンプル変数が最新の読みである心拍数のわずか1読書をしていると呼ばれています。クエリに制限、述語、またはアンカーを設定していないので、ワークアウトが開始されて以来、心拍数の読み取り値をすべて受け取ってはいけませんか?
はい、私は更新ハンドラが最近のエントリを返すだけで、初期結果ブロックにすべての心拍数サンプルが含まれることに気付きました。日付の代わりに、私は今、最後の更新ハンドラから取得したアンカーを使用して、アプリケーションが中断されている間に記録されたすべてのサンプルを取得しています –