我的应用程序中有一个小部件,就像基本的天气小部件一样。
我想刷新小部件的内容而不让用户注意到这一点。
并根据Apple文档go to Updating Content
他们说:
为了帮助您的小部件保持最新状态,系统有时会捕获小部件视图的快照。当小部件再次变得可见时,将显示最新快照,直到系统将其替换为实时版本的视图为止。
要在拍摄快照之前更新小部件的状态,请确保符合NCWidgetProviding协议。
所以我使用 widgetPerformUpdate 更新我的小部件内容
但是会发生什么事,该应用程序会从MainInterface.storboard中显示“初始设计”,直到获取数据并更新屏幕为止,每次我向左或向右滑动时,都会获得“初始设计”,直到获得数据!
我的代码是:
func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
getWeatherInfo()
completionHandler(NCUpdateResult.newData)
}
任何人都知道问题所在以及如何解决?
谢谢。
最佳答案
您应该等待并首先获取weatherInfo
,然后在completionHandler
中启动widgetPerformUpdate
,我将在getWeatherInfo()
方法中添加一个完成代码块,如下所示:
将完成处理添加到getWeatherInfo方法func getWeatherInfo(completion: (_ result: Bool) -> Void)
然后,当您完成了在getWeatherInfo
方法中获取天气的操作后,调用完成模块,您可以在此处指定是否有新的天气数据,因此您可以completion(true)
(如果成功接收到天气),那么您就可以像这样重写widgetPerformUpdate
:
func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
getWeatherInfo { didUpdate in
completionHandler(.newData)
//you can check didUpdate and if it is false return .noData
}
}
关于ios - 通过widgetPerformUpdate刷新今天的扩展内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46951806/