一直在寻找答案,但一切似乎都模糊或不清楚.
无论如何,只想知道功能的目的是什么:
widgetPerformUpdateWithCompletionHandler
Run Code Online (Sandbox Code Playgroud)
在今天的小部件中.
根据Apple的说法:
调用此方法可为窗口小部件提供更新其内容并在快照等操作之前重绘其视图的机会.当窗口小部件完成更新其内容(并在必要时重绘)时,窗口小部件应调用完成处理程序块,并传递相应的NCUpdateResult值.
快照什么时候发生?每当我调试扩展时,widgetPerformUpdateWithCompletionHandler总是在loadView之后被调用.那么当我已经在loadView中加载信息时,在此方法中显式重新加载信息的目的是什么?
根据这个网站:http://www.karlmonaghan.com/tag/today-widget/
在TodayViewController中,有两个地方需要从网络加载数据 - 创建窗口小部件时以及调用widgetPerformUpdateWithCompletionHandler时.对于前者,我在viewDidLoad中加载帖子,以便在窗口小部件显示时它们应该准备就绪.当iOS认为小部件在首次显示后将显示给用户时,将调用widgetPerformUpdateWithCompletionHandler,使小部件有机会更新显示的帖子.
与上述问题相同.
我的应用程序中有一个小部件,就像基本的天气小部件一样。
我想在不让用户注意到的情况下刷新小部件的内容。
根据 Apple 文档,请转到更新内容, 他们说:
为了帮助您的小部件查找最新信息,系统偶尔会捕获您的小部件视图的快照。当小部件再次可见时,将显示最近的快照,直到系统将其替换为视图的实时版本。要在拍摄快照之前更新小部件的状态,请确保符合 NCWidgetProviding 协议。
所以我使用widgetPerformUpdate来更新我的小部件内容
但是发生的情况是应用程序显示来自 MainInterface.storboard 的“初始设计”,直到获取数据并更新屏幕,每次我向左向右滑动时,我都会得到“初始设计”,直到我得到数据!
我的代码是:
func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {
getWeatherInfo()
completionHandler(NCUpdateResult.newData)
}
Run Code Online (Sandbox Code Playgroud)
有谁知道问题是什么以及如何解决?
谢谢。