今天小部件的tableView卡顿了

23

我有一个包含两个东西的今日小组件:

  1. 一个 UILabel
  2. 一个 UITableView

在我的viewWillAppear中,我将标签设置为可见,将tableView设置为隐藏,并将标签文本设置为“Loading”。如下图所示:

然后我获取位置,当此操作完成时,我调用另一个方法并执行以下操作:

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

当这成功完成后,我有一个长这样的tableView:

.

现在出现了问题。
当我打开我的今日小组件并点击viewWillAppear时,我不总是能够设置我的标签,唯一的结果就是它看起来像这样:

.

因此发生的情况是,我只能在tableView中显示先前结果的一点内容。

这种情况偶尔会发生,而且似乎tableView会冻结,我无法更新初始视图,以隐藏tableView并显示标签。即使屏幕像这样冻结,一切都运行正常,我也能够更新tableView和视图。

唯一的问题是当我打开小组件时,它有时会像这样冻结:

而不是显示我的标签。之所以大小为此,是因为我设置了preferredContentSize = CGSizeMake(0, 30)。否则,我想它将会显示整个先前的tableView。

有什么方法可以解决这个问题,以便每次点击viewWillAppear时总是更新视图呢?

更新
开始另一轮悬赏以获取有关此问题的其他意见。


你能添加一些代码吗?例如,你可以发起网络请求并解析结果吗?如果可以,你会调用 reload() 函数来刷新表格视图吗?并且隐藏标签。如果你添加了一些实现,也许我可以帮助你。 - DeVladinci
请展示代码,否则无法提供帮助! - jbg
你是否已经遵循了NCWidgetProviding协议并实现了widgetMarginInsetsForProposedMarginInsets:方法? - Ftoledo
2个回答

10
系统的作用是拍摄一个快照。我也遇到了一些问题,并查看了this文章,但它没有解决我的问题。
对于widgetPerformUpdateWithCompletionHandler,有三个选项:
  1. NCUpdateResultNewData - 新内容需要重新绘制视图
  2. NCUpdateResultNoData - 小部件不需要更新
  3. NCUpdateResultFailed - 更新过程中发生错误
无论调用哪个选项,结果始终相同。而且系统确实会拍摄一个快照。
为了让您的小部件看起来更加时尚,系统会偶尔捕捉您的小部件视图的快照。当小部件再次可见时,将显示最新的快照,直到系统用视图的实时版本替换它。
在拍摄快照之前更新小部件的状态,请确保符合NCWidgetProviding协议。当您的小部件接收到widgetPerformUpdateWithCompletionHandler:调用时,请使用最新内容更新小部件的视图,并调用完成处理程序,使用以下常量之一描述更新的结果。 参考资料
我认为我们可能正在尝试加载过多的数据,这可能是由于此原因引起的。这是我的答案,但我发起了一个赏金,以检查是否有其他答案或者您是否同意我的帖子。

0

你可以把你的操作放在 viewdidload() 中,因为当你进入小部件时,viewdidload() 将被调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接