21

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

该配置有两个选项:

  • 第一个选项取决于当前登录用户的用户名。
  • 第二个选项取决于第一个选项的值。

这适用于 1 个用户,但是,如果用户注销,然后使用不同的帐户登录,当他们尝试配置小部件时,仍然选择旧的选择选项,这是错误的选项,因为它现在是不同的用户。此外,旧数据仍显示在小部件中。

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

我试过了

WidgetCenter.shared.reloadAllTimelines()

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

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

非常感谢,

4

3 回答 3

2

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

于 2021-02-24T15:08:12.897 回答
-1

我找到了这个解决方案,但仅适用于动态属性:为 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)
   }

}
于 2020-11-14T16:16:56.620 回答
-2

我有同样的问题,小部件显示过时的配置选项。我通过强制刷新我正在使用的共享核心数据数据库中的所有对象解决了这个问题。我在“getTimeline”方法中做到了这一点。

于 2020-10-31T18:07:41.637 回答