ios 在WidgetKit中,如何从通过网络调用获得的动态选项中设置默认intent值?

6yjfywim  于 2022-12-01  发布在  iOS
关注(0)|答案(1)|浏览(141)

当用户第一次安装我的widget时,当他们选择“编辑Widget”时,我希望显示默认选项而不是“选择”。这是一个动态Intent,选项是从网络调用中检索的。
在我的IntentHandler中,有两个我正在使用的函数:

extension IntentHandler: MyIntentHandling {
    func provideMyValueOptionsCollection(for intent: MyIntent, with completion: @escaping (INObjectCollection<MyValue>?, Error?) -> Void) { }

    func defaultMyValue(for intent: MyIntent) -> [MyValue]? { }
}

我可以通过provideMyValueOptionsCollection的网络调用获取选项,方法是在获取值后调用完成处理程序。但是defaultMyValue是同步的,因此它不会接受来自网络调用的闭包返回值(get error:Cannot convert return expression of type '()' to return type '[MyValue]')。是否有办法将从网络调用获得的默认值提供给Edit Widget屏幕?

2skhul33

2skhul331#

我也遇到过同样的问题,和你一样,最后通过将数据存储在UserDefaults中来解决它,并且也遇到了同样的问题,即在数据第一次显示时不显示数据
我用下面的解决方案解决了这个问题:

移除defaultMyValue方法中耗时的作业

我们有一个将图像转换为二进制数据的操作(*image url string -〉URL-〉Data *),当我们将这个操作从defaultMyValue方法移到其他地方(例如在UI中)时,这个操作得到了完美的解决。

相关问题