watchOS 3 アプリを作成しようとしていますが、バックグラウンド タスクでコンプリケーションを更新したいと考えています。
まず、 内のバックグラウンド タスクでサーバーから新しいデータを取得しますhandle()
。その後、 を呼び出してアクティブな合併症を更新しcomplicationServer.reloadTimeline(for:)
ます。
コンソールに「UPDATE COMPLICATION」というメッセージが表示されるので、コードが実行されます。
しかし、リロード後も、コンプリケーションはまだ古いデータを表示します。ウォッチフェイスを切り替えて元に戻すと、コンプリケーションがリロードされることがあります。バックグラウンド タスクからコンプリケーションをリロードするために何か他のことをする必要がありますか?
func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
for task : WKRefreshBackgroundTask in backgroundTasks {
if (WKExtension.shared().applicationState == .background) {
if task is WKApplicationRefreshBackgroundTask {
let dataProvider = DataProvider()
dataProvider.getData(station: "Name", completion: { (data, error) in
self.updateComplication()
self.scheduleNextBackgroundRefresh()
task.setTaskCompleted()
})
}
} else {
task.setTaskCompleted()
}
}
}
func updateComplication() {
let complicationServer = CLKComplicationServer.sharedInstance()
for complication in complicationServer.activeComplications! {
print("UPDATE COMPLICATION")
complicationServer.reloadTimeline(for: complication)
}
}