iOS WidgetKit - Виджет не обновляется, даже когда значения UserDefaults синхронизированы - PullRequest
3 голосов
/ 13 июля 2020

Я использую XCode 12 beta 2 (iOS 14 Sim) для передачи данных из моего приложения в виджет с помощью AppContainer.

Я использую приведенный ниже код для сохранения данных (здесь String) в контейнер приложения.

  let userDefaults = UserDefaults(suiteName: "group.abc.WidgetDemo")
        userDefaults?.setValue(status, forKey: "widget")
        userDefaults?.synchronize()

И в файле Widget.swift


struct Provider: TimelineProvider {
    
    @AppStorage("widget", store: UserDefaults(suiteName: "group.abc.WidgetDemo"))
    var status: String = String()

    public func snapshot(with context: Context, completion: @escaping (MyEntry) -> ()) {
        let entry = MyEntry(status: status, date: Date())
        completion(entry)
    }

    public func timeline(with context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
       
        let entryDate = Calendar.current.date(byAdding: .second, value: 10, to: Date())!
        let entry = MyEntry(status: status, date: entryDate)
        let timeline = Timeline(entries: [entry], policy: .atEnd)
        completion(timeline)

    }
}

Обратите внимание: запись на временной шкале занимает 10 секунд после текущей даты.

Даже после 10-секундной задержки я не видно обновленной информации в виджете.

1 Ответ

1 голос
/ 13 июля 2020

По-видимому, после прочтения документации мне удалось заставить его работать, используя приведенную ниже

       WidgetCenter.shared.reloadTimelines(ofKind: "group.abc.WidgetDemo")

Но если иногда вышеперечисленное не работает, я пытаюсь перезагрузить все временные шкалы.

       WidgetCenter.shared.reloadAllTimelines()

Надеюсь, Apple скоро выпустит исправление.

Обратите внимание: код временной шкалы перезагрузки записан в исходный файл, откуда мы передаем данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...