iOS14.5 Widget 数据不是最新的
Posted
技术标签:
【中文标题】iOS14.5 Widget 数据不是最新的【英文标题】:iOS14.5 Widget data not up-to-date 【发布时间】:2021-05-14 22:32:21 【问题描述】:我使用以下代码更新小部件的时间线,但我从核心数据中获取的“结果”不是最新的。
我的逻辑是当检测到主机应用程序进入后台时,我调用“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()
【问题讨论】:
我遇到了类似的问题:***.com/questions/67482411/…。我很想知道你对SimpleEntry
中的tasks
属性做了什么。我很难将 CloudKit 集成到我的小部件中,我怀疑这与 CloudKit 调用时间过长有关。我很想知道您如何处理核心数据。谢谢!
@West1 你好,我的问题已经解决了。请检查“更新”部分。我检查了您的帖子,您是否将 cloudkit 容器部署到生产环境中?您可以在 CloudKit 仪表板上找到它。
看来将 CloudKit 容器部署到生产环境是我的问题的答案。我已经为这个问题苦苦挣扎了两个星期,而你只是随便解决了它。如果您发布我的问题的答案,我会接受。非常感谢!你让我很快乐! :)
@West1 很高兴听到这个消息!
【参考方案1】:
更新:
我在获取之前添加了以下代码来刷新核心数据。一切正常。
// refresh the core data
try? viewContext.setQueryGenerationFrom(.current)
viewContext.refreshAllObjects()
【讨论】:
以上是关于iOS14.5 Widget 数据不是最新的的主要内容,如果未能解决你的问题,请参考以下文章