Фоновая задача данных в watchOS - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь создать базовое проверочное приложение для WatchOS и усложнение, которое извлекает данные JSON из API и отображает на их основе шкалу.Я смотрел Apple «Обновление приложения для ваших часов» и нашел несколько других вопросов по этому вопросу, но пример кода был удален.

API предоставляет прогнозы на следующие~ 48 часов и может использоваться для заполнения записей графика времени для осложнения.Когда контроллер Complication запрашивает записи временной шкалы, я извлекаю данные из Extension Extension, и поэтому они должны обновляться.Однако процесс планирования фоновых задач поставил меня в тупик.Когда я вызываю backgroundSession.dataTask(with: URL(string: "https://......, я ожидаю, что мои URLSessionDataDelegate функции будут вызываться, но они никогда не будут вызываться, и я никогда не получаю handle(_ backgroundTasks), вызываемый с WKURLSessionRefreshBackgroundTask

Вопрос: КогдаWKApplicationRefreshBackgroundTask отправляется на мой ExtensionDelegate как мне запрашивать / планировать данные из API и затем получать их?

Код

//ExtensionDelegate
class ExtensionDelegate: NSObject, WKExtensionDelegate, URLSessionDelegate, URLSessionDataDelegate {

...


func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
    for task in backgroundTasks {
        switch task {
        case let backgroundTask as WKApplicationRefreshBackgroundTask:
            print("background task as WKApplicationRefreshBackgroundTask")
            self.scheduleURLSession()
            backgroundTask.setTaskCompletedWithSnapshot(false)
            return


        case let urlSessionTask as WKURLSessionRefreshBackgroundTask:
            print("background task as WKURLSessionRefreshBackgroundTask")
            let backgroundConfigObject =
                URLSessionConfiguration.background(withIdentifier: urlSessionTask.sessionIdentifier)
            let backgroundSession = URLSession(configuration: backgroundConfigObject, delegate: self, delegateQueue: nil)
            print("Rejoining session ", backgroundSession)

            self.savedTask = urlSessionTask
            return
        default:
            // make sure to complete unhandled task types
            task.setTaskCompletedWithSnapshot(false)
        }
    }
}





func scheduleURLSession() {
    let backgroundConfigObject = URLSessionConfiguration.background(withIdentifier: "nz.co.craigstanton")
    backgroundConfigObject.sessionSendsLaunchEvents = true

    let backgroundSession = URLSession(configuration: backgroundConfigObject, delegate: self, delegateQueue: nil)

    let dataTask = backgroundSession.dataTask(with: URL(string: "https://craigstanton.co.nz/uvi-test?latitude=-36&longitude=174")!)

    print("scheduleURLSession about to 'resume' ")
    dataTask.resume()
}


//Delegate callbacks
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
    print("Data task error", error)
}


func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse,
                    completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {

    print("urlSession Delegate did receive everything ")
}

func urlSession(_: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
    print("urlSession Delegate did receive something ")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...