如何在WidgetKit中重置意图扩展配置

问题描述

我有一个用户可以登录的应用程序。如果用户登录,则我将为我的窗口小部件显示一个占位符,并且可以通过意图扩展对其进行配置。

配置有两个选项:

这对于1个用户来说效果很好,但是,如果该用户注销,然后使用其他帐户登录,则当他们尝试配置窗口小部件时仍会选择旧的选定选项,这是错误的选项,因为现在已经不一样了用户。此外,旧数据仍显示在小部件中。

如何重置WidgetKit中的小部件配置?这意味着,当用户尝试对其进行配置时,所有先前的配置将被取消选择并且为空。

我尝试过

WidgetCenter.shared.reloadAllTimelines()

但这只会重新加载时间轴方法,而不会重置配置。

我查看了Apple的文档,也找不到任何相关信息。

非常感谢

解决方法

你不能。您唯一的选择是忽略小部件端的配置选项并向用户显示某种错误消息,表明他们的配置需要更新。 INExtension 没有提供处理这个(还)的方法

,

我遇到了与小部件显示陈旧的配置选项相同的问题。我通过强制刷新共享的Core Data数据库中正在使用的所有对象来解决此问题。我是在“ getTimeline”方法中完成的。

,

我找到了这个解决方案,但仅针对动态属性:为IntentHandler中的每个用户使用不同的标识符。 示例:

class IntentHandler: XXExtension { ... }

extension IntentHandler: XXDynamicXXXSelectionIntentHandling {

   func provideXXXOptionsCollection(for intent: XXDynamicXXXSelectionIntent,with completion: @escaping (XXObjectCollection<XXX>?,Error?) -> Void) {
      let userId = (UserDefaults.myGroup().object(forKey: "UserId" ) as? String) ?? ""
      let items: [XXX] = UserDefaults.myGroup().sharedXxx.map { (sharedXxx) -> XXX in
         return XXX(identifier: userId + "_" + sharedXxx.Id // <== add unique prefix ===
                       display: sharedXxx.visibleName())
      }        
      let collection = XXObjectCollection(items: items)
      completion(collection,nil)
   }

}