Я использую следующий код для обновления временной шкалы виджета, но результат, который я получил из основных данных, не актуален.
Моя логика заключается в том, что при обнаружении основного приложения уходит в фоновый режим, я вызываю 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()
tasks
вSimpleEntry
. Мне сложно интегрировать CloudKit в мой виджет, и я подозреваю, что это связано с тем, что вызов CloudKit занимает слишком много времени. Я хотел бы знать, как вы обрабатываете основные данные. Спасибо! - person West1   schedule 20.05.2021