iOS14.5 Данные виджета устарели

Я использую следующий код для обновления временной шкалы виджета, но результат, который я получил из основных данных, не актуален.

Моя логика заключается в том, что при обнаружении основного приложения уходит в фоновый режим, я вызываю WidgetCenter.shared.reloadAllTimelines () и получаю основные данные в функции getTimeline. После распечатки результата это старые данные. Также я получаю данные с тем же предикатом под .background, данные актуальны.

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

Может ли кто-нибудь мне помочь?

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
        var entries: [SimpleEntry] = []
        let now = Date()
        let newRequest = coreDataManager.fetchRequestForTimeline(date: now)
        let result = try? viewContext.fetch(newRequest)
        print(result!)
        print("new####")
        entries.append(SimpleEntry(date: now, tasks: result))
        let timeline = Timeline(entries: entries, policy: .never)
        completion(timeline)
    }

Это код в главном приложении

case .background:
                        WidgetCenter.shared.reloadAllTimelines()
                        // fetch here
                        print("App is in background")

Обновлять:

Я добавил следующий код, чтобы обновить основные данные перед извлечением. Все работает как положено.

// refresh the core data
try? viewContext.setQueryGenerationFrom(.current)
viewContext.refreshAllObjects()

person Yu23333    schedule 14.05.2021    source источник
comment
У меня аналогичная проблема: stackoverflow.com/questions/67482411/. Я хотел бы знать, что вы делаете со свойством tasks в SimpleEntry. Мне сложно интегрировать CloudKit в мой виджет, и я подозреваю, что это связано с тем, что вызов CloudKit занимает слишком много времени. Я хотел бы знать, как вы обрабатываете основные данные. Спасибо!   -  person West1    schedule 20.05.2021
comment
@ West1 Здравствуйте, я решил свою проблему. Пожалуйста, проверьте раздел "Обновление". И я проверил ваш пост, вы развернули контейнер cloudkit в продакшн? Вы можете найти его на панели инструментов CloudKit.   -  person Yu23333    schedule 21.05.2021
comment
Похоже, что развертывание контейнера CloudKit в производственной среде - это ответ на мою проблему. Я боролся с этой проблемой в течение двух недель, а вы просто случайно ее решили. Если вы опубликуете ответ на мой вопрос, я его приму. Большое спасибо! Ты сделал мой день! :)   -  person West1    schedule 21.05.2021
comment
@ West1 Рад это слышать!   -  person Yu23333    schedule 22.05.2021


Ответы (1)


Обновление:

Я добавил следующий код, чтобы обновить основные данные перед извлечением. Все работает как положено.

// refresh the core data
try? viewContext.setQueryGenerationFrom(.current)
viewContext.refreshAllObjects()
person Yu23333    schedule 15.06.2021