2017-10-10 23 views
0

Appleによれば、がHKにデータを追加してトリガーされた後にHKObserverQueryCompletionHandlerに電話する必要があります。HKObserverQueryのバックグラウンド配信は、completionHandlerを呼び出した後で動作しなくなる

ここ

が私のコードである。しかし、すぐに、私はcompletionHandlerを呼び出すように、観測者のクエリはバックグラウンドで、それ以上の更新を与えて停止し

..:

guard let sampleType = sample as? HKQuantityType else { return nil } 

let query = HKObserverQuery(sampleType: sampleType, predicate: nil, updateHandler: { query, completionHandler, error in 

    completionHandler() 

    IamExecutingHKStatisticsCollectionQueryHere() 
}) 

healthStore?.execute(query) 
healthStore?.enableBackgroundDelivery(for: sampleType, frequency: .hourly, withCompletion: { success, error in 

}) 

私は呼んでいない場合completionHandlerすべて正常に動作しますが、長期間テストしたことがありません。

答えて

0

completionHandler()を呼び出すと、新しいデータの処理が完了したことを示します。 updateHandlerが呼び出されたことに応答して実行したクエリの結果を処理した場合にのみ呼び出します。今のところ早くcompletionHandler()に電話すると、データを処理する機会を得る前に、バックグラウンドでアプリの実行が停止されます。

+0

私はすでにそれを試しました。何も変更していません。問題は、私がcompletionHandler()を呼び出すと、私は他の更新を受け取らないということです。 completionHandlerを呼び出すと、更新の受信を停止したいのですか? –

+0

このようなサンプルの種類はありますか?毎時更新のコード登録新しいデータがあるときに1時間に1回あなたのアプリが起動しないと言っていますか?あなたはそれがすぐに通知を受けることを期待していますか? – Allan

+0

データタイプはステップです。私は新しいステップがHKに追加されたときに毎時通知を受けることを期待しますが、私はそうではありません。完了ハンドラを決して呼び出さなければ、すべてが完璧に動作します。これはバグだと思われますか? –

関連する問題