iOS - Heute Erweiterung Widget gelöscht im Laufe der Zeit

9

Situation wie es sein sollte

Wir haben ein today-Widget, das abhängig vom Datensatz in der entsprechenden App maximal 6 Schaltflächen anzeigt. Diese Daten werden mit App-Gruppen geteilt. Wenn mindestens eine Schaltfläche konfiguriert ist, wird sie wie in der Abbildung oben angezeigt. Wenn der Benutzer nicht angemeldet ist oder keine Tasten konfiguriert sind, wird eine Meldung wie in der Abbildung unten angezeigt.

Problem

Nach einigen Stunden (zwischen 4 und 7), in denen die App nicht geöffnet wurde, kehrt das Widget zur Ansicht 'Keine Schaltflächen konfiguriert' zurück.

Analyse bisher

Wie die Daten aus der App-Gruppe geladen werden, verwenden Sie den Code wie unten gezeigt. ( Giste für vollständigen Code ) Wie ich es geschrieben habe, kann die Ansicht "Keine Schaltflächen konfiguriert" nur so aussehen gezeigt wird, wenn das Array buttons tatsächlich existiert, aber eine Länge von Null hat.

Ich habe erwartet, dass so etwas wie ein Cache-Clearing oder ein Hintergrunddienst gestoppt wird, aber soweit ich sehen kann, sollten Ausnahmen früher erkannt werden:

  • Wenn keine Verbindung zu den Daten der App-Gruppe hergestellt werden konnte, sollte userDefaults gleich Null sein, daher sollte die Ansicht 'Nicht eingeloggt' angezeigt werden.
  • Falls die Schaltflächen nie definiert wurden, sollte buttons gleich Null sein und sollte wieder die 'Nicht eingeloggte Ansicht' anzeigen

Wenn man bedenkt, dass die App nichts im Hintergrund tut, kann die App selbst die Schaltflächen nicht ändern.

Ich habe versucht, dies zu reproduzieren, während der Debugger angeschlossen ist, aber das Problem wird nicht reproduziert.

Hat jemand überhaupt die geringste Idee, wie man dieses Problem beheben oder mit dem Debuggen beginnen kann?

Relevante Dateien:

Relevanter Code:

%Vor%     
Remy Kabel 08.06.2017, 11:07
quelle

1 Antwort

1

Today Extension Controller ist ein UIViewController und folgt somit dem gleichen Lebenszyklus wie der UIViewController . Daher wird die Lebenszyklusmethode viewDidLoad() jedes Mal aufgerufen, wenn widget geladen wird.

Auch widgetPerformUpdateWithCompletionHandler wird aufgerufen:

  1. wenn das Widget im Hintergrund aktualisiert wird
  2. bevor der Widget-Snapshot genommen wird

Also rufen Sie loadData() nicht nur in widgetPerformUpdateWithCompletionHandler auf, sondern rufen Sie auch von viewDidLoad() auf.

Wo haben Sie auch den Code geschrieben, um UIButtons aus superview hinzuzufügen / zu entfernen und "No buttons configured" in Ihrem Code anzuzeigen?

    
PGDev 18.06.2017 17:00
quelle