我有一个今天的小部件包含两件事:
一个 UILabel
一个 UITableView
在我的viewWillAppear
设置标签是可见的,我的tableView被隐藏,我将标签文本设置为"正在加载".见下图.
然后我得到一个位置,当这个完成后,我调用另一个方法和
如果我没有找到任何数据,我只需将标签文本更新为"未找到数据"
否则,我将标签设置为隐藏,并且tableView可见,我开始更新数据
成功完成后,我有一个如下所示的tableView:
.
我现在的问题.
当我打开今天的小部件并点击时viewWillAppear
,我并不总是设置我的标签,我得到的唯一结果就是这个
.
所以会发生的事情是我只能在tableView中显示我之前的一些结果.
偶尔会发生这种情况,似乎tableView冻结,我无法更新初始视图,隐藏tableView并显示标签.即使屏幕像这样冻结,一切都在运行,我设法更新tableView和视图.
唯一的问题是当我打开窗口小部件时,屏幕冻结如下:
有时而不是显示我的标签.它的大小原因,是因为我设置了preferredContentSize = CGSizeMake(0, 30)
.否则我打赌它会显示整个前一个tableView.
有关如何解决此问题的任何想法,以便在我点击时始终更新视图viewWillAppear
?
更新
开始另一个赏金,看看是否有关于此问题的其他输入.
系统所做的是它需要一个快照.我也一直在努力解决这个问题,我已经检查了这篇文章,但它没有解决我的问题.
对于widgetPerformUpdateWithCompletionHandler
有三个选项
NCUpdateResultNewData
- 新内容要求您重绘视图
NCUpdateResultNoData
- 小部件不需要更新
NCUpdateResultFailed
- 更新过程中发生错误
它们中的哪一个被称为总是相同的结果并不重要.系统确实拍摄了快照.
为了帮助您的窗口小部件查看最新版本,系统偶尔会捕获窗口小部件视图的快照.当窗口小部件再次可见时,将显示最新的快照,直到系统将其替换为视图的实时版本.
要在拍摄快照之前更新窗口小部件的状态,请确保符合NCWidgetProviding协议.当您的窗口小部件收到widgetPerformUpdateWithCompletionHandler:call时,使用最新内容更新窗口小部件的视图并调用完成处理程序,使用以下常量之一来描述更新的结果
参考.
我认为我们可能会尝试加载"重"数据,因此可能会发生这种情况.这是我的答案,但我开始赏金以检查其他人是否有其他答案或者您是否同意我的帖子.