Подтвердить что ты не робот

Сегодня виджет tableView зависает

У меня есть виджет сегодня, который содержит две вещи:

  • A UILabel
  • A UITableView

В моем viewWillAppear я установил ярлык, чтобы быть видимым, и мой tableView был скрыт, и я установил текст метки в "Загрузка". См. Изображение ниже.

Затем я получаю местоположение, и когда это будет сделано, я вызываю другой метод и

  • Если я не найду никаких данных, я просто обновляю текст ярлыка до "Не нашел данных"
  • В противном случае я устанавливаю ярлык для скрытия, а tableView будет видимым, и я начну обновлять данные.

Когда это будет успешно выполнено, у меня есть tableView, который выглядит так:

.

К моей проблеме сейчас.
Когда я открываю свой виджет сегодня и нажимаю viewWillAppear, мне не всегда удается установить мой ярлык, и единственный результат, который я получаю, - это

.

Итак, что происходит, я могу показать только немного моего предыдущего результата в tableView.

Это случается иногда, и кажется, что tableView зависает, и я не могу обновить начальное представление, чтобы скрыть tableView и показать ярлык. Даже когда экран зависает так, все работает так, как должно, и мне удается обновить tableView и представление.

Единственная проблема заключается в том, что я открываю виджет, который зависает на экране следующим образом:

иногда вместо того, чтобы показывать мой ярлык. Причина в том, что он имеет размер как есть, потому что я установил preferredContentSize = CGSizeMake(0, 30). В противном случае, я уверен, он покажет весь предыдущий tableView.

Любые идеи о том, как это решить, всегда обновлять представление, когда я нажимаю viewWillAppear?

Обновление
Начиная еще одну награду, чтобы узнать, есть ли какой-то другой ввод по этой проблеме.

4b9b3361

Ответ 1

Что делает система, так это то, что она принимает снимок. Я тоже немного борется с этой проблемой, и я проверил this но это не решило мою проблему.

Для widgetPerformUpdateWithCompletionHandler есть три варианта

  • NCUpdateResultNewData - новое содержимое потребовало, чтобы вы перерисовали представление
  • NCUpdateResultNoData - Виджет не требует обновления
  • NCUpdateResultFailed - Произошла ошибка во время процесса обновления.

Не имеет значения, какой из них называется, это всегда один и тот же результат. И система делает снимок.

Чтобы ваш виджет выглядел актуальным, система иногда захватывает моментальных снимков вашего виджетов. Когда виджет становится видимым опять же, последний снимок отображается до тех пор, пока система не заменит это с живой версией представления.

Чтобы обновить состояние виджетов до момента создания моментального снимка, убедитесь, что соответствуют протоколу NCWidgetProviding. Когда ваш виджет получает widgetPerformUpdateWithCompletionHandler: вызов, обновление виджеты с самым последним контентом и вызов завершения обработчик, используя одну из следующих констант для описания результата обновления

Ссылка.

Я думаю, что мы, возможно, пытаемся загрузить "тяжелые" данные, и из-за этого это может произойти. Это мой ответ, но я начал щедрость, чтобы проверить, есть ли у кого-то другой ответ или если вы согласны с моим сообщением.