今天Widget tableView冻结了

时间:2015-12-30 10:04:01

标签: ios swift widget tableview today-extension

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

  1. A UILabel
  2. A UITableView
  3. 在我的viewWillAppear中,我将标签设置为可见,并将我的tableView隐藏起来,并将标签文本设置为“正在加载”。见下图。

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

    1. 如果我找不到任何数据,我只需将标签文本更新为“未找到数据”
    2. 否则我将标签设置为隐藏,并且tableView可见,我开始更新数据
    3. 成功完成后,我有一个如下所示的tableView:

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

      所以会发生的事情是我只能在tableView中显示我之前的一些结果。

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

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

      有时而不是显示我的标签。它的大小与原因一样,是因为我设置了preferredContentSize = CGSizeMake(0, 30)。否则我打赌它会显示整个上一个tableView。

      有关如何解决此问题的任何想法,以便在我点击viewWillAppear时始终更新视图?

      更新
      开始另一个赏金,看看是否有关于这个问题的其他输入。

2 个答案:

答案 0 :(得分:10)

系统的作用是它需要快照。我也一直在努力解决这个问题,我已经检查了this帖子,但它没有解决我的问题。

对于widgetPerformUpdateWithCompletionHandler,有三个选项

  1. NCUpdateResultNewData - 新内容要求您重绘视图
  2. NCUpdateResultNoData - 窗口小部件不需要更新
  3. NCUpdateResultFailed - 更新过程中发生错误
  4. 这些中的哪一个被称为总是相同的结果无关紧要。 系统会拍摄快照。

      

    为了帮助您的小部件查看最新版本,系统偶尔会捕获   窗口小部件视图的快照。当小部件变得可见时   再次,显示最新的快照,直到系统替换   它有一个实时版本的视图。

         

    要在拍摄快照之前更新窗口小部件的状态,请务必   符合NCWidgetProviding协议。当你的小部件收到   widgetPerformUpdateWithCompletionHandler:调用,更新你的   小部件的视图与最新内容并调用完成   handler,使用以下常量之一来描述结果   更新

    Reference

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

答案 1 :(得分:0)

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