swift 如何在WidgetKit中重置Intent扩展配置

osh3o9ms  于 2022-12-22  发布在  Swift
关注(0)|答案(3)|浏览(146)

我有一个用户可以登录的应用程序,如果用户登录了,我会显示一个占位符作为我的小部件,它可以通过Intent扩展进行配置。
该配置有两个选项:

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

这对于一个用户来说很有效,但是,如果用户注销,然后用另一个帐户登录,当他们尝试配置小部件时,旧的选项仍然被选中,这是错误的选项,因为现在是另一个用户。
如何在WidgetKit中重置小部件的配置?也就是说,当用户尝试配置它时,所有先前的配置都将被取消选中并为空。
我试过了

WidgetCenter.shared.reloadAllTimelines()

但这只会重新加载时间轴方法,而不会重置配置。
我看过苹果的文档,也找不到任何关于它的东西。

nzkunb0c

nzkunb0c1#

你不能,你唯一的选择就是忽略widget端的配置选项,并向用户显示某种错误消息,告诉他们他们的配置需要更新,INExtension还没有提供处理这个问题的方法。

mfpqipee

mfpqipee2#

我找到了此解决方案,但仅适用于动力学属性:在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)
   }

}
w8rqjzmb

w8rqjzmb3#

我也遇到了同样的问题,小部件显示过时的配置选项。我通过强制刷新我正在使用的共享Core Data数据库中的所有对象来解决这个问题。我在"getTimeline”方法中完成了这一操作。

相关问题