今日小部件tableView冻结

问题描述 投票:23回答:2

我有一个今天的小部件,其中包含两件事:

  1. A UILabel
  2. A UITableView

viewWillAppear中,将标签设置为可见,将tableView设置为隐藏,并将标签文本设置为“正在加载”。参见下图。

“”

然后我得到一个位置,完成后,我调用另一个方法,然后

  1. 如果找不到任何数据,我只是将标签文本更新为“找不到数据”
  2. 否则,我将标签设置为隐藏,将tableView设置为可见,然后开始更新数据

成功完成后,我的tableView看起来像这样:

“”

[现在解决我的问题。当我打开今天的窗口小部件并单击viewWillAppear时,我并不总是设法设置标签,唯一得到的结果是这个

“”

所以发生的是,我只能在tableView中显示以前的结果。

这种情况偶尔会发生,似乎tableView冻结了,我无法更新初始视图,而是隐藏tableView并显示标签。即使屏幕像这样死机,一切也都应按预期运行,而且我设法更新了tableView和视图。

唯一的问题是,当我打开屏幕冻结的窗口小部件时,如下所示:

“”

有时不显示我的标签。之所以如此,是因为我设置了preferredContentSize = CGSizeMake(0, 30)。否则,我敢打赌它将显示整个先前的tableView。

关于如何解决这个问题的任何想法,当我按下viewWillAppear时总是更新视图?

更新开始另一个赏金,以查看是否对此问题还有其他意见。

ios swift widget tableview today-extension
2个回答
10
投票

[系统要做的是它需要快照。我也一直在为这个问题苦苦挣扎,并且检查了this帖子,但它没有解决我的问题。

widgetPerformUpdateWithCompletionHandler有三个选项

  1. NCUpdateResultNewData-新内容需要您重新绘制视图
  2. [NCUpdateResultNoData-小部件不需要更新
  3. NCUpdateResultFailed-更新过程中发生错误

不管是哪一个,它总是相同的结果。 并且系统确实拍摄了快照。

为了帮助您的小部件保持最新状态,系统偶尔会捕获小部件视图的快照。当小部件可见时再次显示最新快照,直到系统更换为止它带有视图的实时版本。

要在拍摄快照之前更新小部件的状态,请确保符合NCWidgetProviding协议。当您的小部件收到widgetPerformUpdateWithCompletionHandler:调用,更新您的小部件的包含最新内容的视图,并调用补全处理程序,使用以下常量之一描述结果更新]]

Reference

我认为我们可能正在尝试加载“大量”数据,因此可能会发生这种情况。这是我的答案,但我开始悬赏以检查其他人是否有其他答案或您是否同意我的帖子。


0
投票

您可以将操作放在viewdidload()中,因为在您输入小部件时将调用viewdidload()

© www.soinside.com 2019 - 2024. All rights reserved.