当用户第一次安装我的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屏幕?
1条答案
按热度按时间2skhul331#
我也遇到过同样的问题,和你一样,最后通过将数据存储在
UserDefaults
中来解决它,并且也遇到了同样的问题,即在数据第一次显示时不显示数据我用下面的解决方案解决了这个问题:
移除
defaultMyValue
方法中耗时的作业我们有一个将图像转换为二进制数据的操作(*image url string -〉
URL
-〉Data
*),当我们将这个操作从defaultMyValue
方法移到其他地方(例如在UI中)时,这个操作得到了完美的解决。