2017-10-10 113 views
0

因此,根據Apple的說法,我需要在updateHandler由數據被添加到HK觸發後調用HKObserverQueryCompletionHandlerHKObserverQuery後臺傳送在呼叫完成後停止工作處理器

但只要我叫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

您以這種方式觀察哪種樣本類型?您的代碼註冊每小時更新。你是否說過,當有新數據時,你的應用程序每小時沒有啓動一次?你是否期望它立即得到通知? – Allan

+0

數據類型是步驟。我希望在香港增加新的步驟時每小時得到通知,但我沒有。雖然如果我從來不打電話給completionHandler,一切都很完美..我懷疑這是一個錯誤?! –