ios swift widget tableview today-extension

ios - Hoy Widget tableView se congela



swift today-extension (1)

Tengo un widget de hoy que contiene dos cosas:

  1. Una UILabel
  2. Una UITableView

En mi viewWillAppear , viewWillAppear la etiqueta para que sea visible y mi tableView se oculte y establezco el texto de la etiqueta en "Cargando". Ver imagen a continuación.

Luego obtengo una ubicación y cuando esto se hace, llamo a otro método y

  1. Si no encuentro ningún dato, simplemente actualizo el texto de la etiqueta a "No encontré datos"
  2. De lo contrario, configuro que la etiqueta esté oculta y la vista de tabla sea visible y comienzo a actualizar los datos.

Cuando esto se hace con éxito, tengo un tableView que se ve así:

.

A mi problema ahora.
Cuando abro mi widget de hoy y viewWillAppear , no siempre viewWillAppear configurar mi etiqueta y el único resultado que obtengo es este

.

Entonces, lo que sucede es que solo puedo mostrar un poco de mi resultado anterior en el tableView.

Esto sucede ocasionalmente y parece que la tableView se congela y no puedo actualizar la vista inicial, para ocultar la tableView y mostrar la etiqueta. Incluso cuando la pantalla se congela así, todo se ejecuta como debería y puedo actualizar la vista de tabla y la vista.

El único problema es cuando abro el widget que la pantalla se congela así:

A veces en lugar de mostrar mi etiqueta. La razón por la que está en el tamaño tal como está, es porque configuro el preferredContentSize = CGSizeMake(0, 30) . De lo contrario, apuesto a que se mostrará la tabla completa anterior.

¿Alguna idea de cómo resolver esto, para actualizar siempre la vista cuando viewWillAppear ¿ viewWillAppear ?

Actualizar
Comenzando otra recompensa para ver si hay alguna otra entrada sobre este tema.


Lo que hace el sistema es que toma una instantánea. También he estado luchando un poco con este problema y he revisado this publicación, pero no resolví mi problema.

Para el widgetPerformUpdateWithCompletionHandler hay tres opciones

  1. NCUpdateResultNewData : el nuevo contenido requiere que NCUpdateResultNewData a dibujar la vista
  2. NCUpdateResultNoData : el widget no requiere actualización
  3. NCUpdateResultFailed : se produjo un error durante el proceso de actualización

No importa cuál de estos se llame, es siempre el mismo resultado. Y el sistema toma una instantánea.

Para ayudar a que su widget se vea actualizado, el sistema ocasionalmente captura instantáneas de la vista de su widget. Cuando el widget vuelve a ser visible, se muestra la instantánea más reciente hasta que el sistema lo reemplaza con una versión en vivo de la vista.

Para actualizar el estado de un widget antes de tomar una instantánea, asegúrese de cumplir con el protocolo NCWidgetProviding. Cuando su widget reciba el widgetPerformUpdateWithCompletionHandler: llame, actualice la vista de su widget con el contenido más reciente y llame al controlador de finalización, utilizando una de las siguientes constantes para describir el resultado de la actualización

Reference .

Creo que quizás estamos tratando de cargar datos "pesados" y esto podría ocurrir debido a eso. Esta es mi respuesta, pero comencé una recompensa para comprobar si alguien más tiene otra respuesta o si está de acuerdo con mi publicación.