Sporadischer schwarzer Bildschirm bei der Ausführung von segue in iOS 9.2.1 / XCode 7.2

9

Upvoters: Kannst du mich wissen lassen, ob du dieses Problem auch gesehen hast?

Das Problem, das ich sehe, tritt etwa alle 1 bis 15 Mal auf, wenn ich versuche, einen View-Controller über eine Schaltfläche in einer bestimmten Szene modal zu starten.

Dies wird mit iOS 9.2.1 und XCode 7.2 gemacht, obwohl nicht klar ist, in welchen Versionen es passiert. Es ist nicht einfach, die iOS-Version zu ändern.

Die Symptome sind wie folgt:

  1. Der Zielansicht-Controller ist auf dem Telefon nicht sichtbar. Stattdessen wird der obere Balken (der mit dem Träger) schwarz und manchmal flackert es, so dass der ganze Bildschirm komplett schwarz ist. Der Startansicht-Controller ist sichtbar, reagiert jedoch nicht.
  2. Wenn das passiert, gehe ich zum XCode-Bildschirm und zeige das Debugging an. Bemerkenswerterweise zeigt dies den Zielbildschirm, fast so, wie er aussehen soll. Der einzige Unterschied besteht darin, dass eine der Ansichten ihr drawRect nicht ausgeführt hat und eine der anderen Ansichten ganz gesprenkelt aussieht. Aber es entspricht natürlich nicht dem, was das Telefon zeigt.
  3. Der Abbrechen-Button auf dem Zielbildschirm scheint immer noch zu funktionieren, denn wenn ich drücke, wo es sein soll, funktioniert die App weiter. Wenn ich versuche, den Bildschirm mit der Taste neu zu starten, funktioniert es wieder nicht. Sobald dies passiert ist, hat der Bildschirm für diese Sitzung nicht mehr funktioniert und die App muss beendet und neu gestartet werden.

Es gibt nicht viele Hinweise, aber diese Information kann helfen:

  • Es gibt 3 scrollviews mit Ansichten auf dem Zielbildschirm. Alle drei Kindansichten haben ihre eigene drawRect. Es stellt sich heraus, dass einer der drawRects nicht aufgerufen wird, wenn der Fehler auftritt, was dazu führt, dass der graue Hintergrund angezeigt wird. Die gesprenkelte Ansicht läuft, aber ich habe keine Ahnung, warum es im Debugging so aussieht.
  • Keine Warnungen in XCode. Nichts über NSLayout-Beschränkungen oder Präsentationen, die sich überschneiden.
  • In der prepareForSegue-Funktion des Controllers für die Zielansicht werden zwei Felder festgelegt.
  • Der Übergang wird vom Times-Button über das Storyboard gestartet. Es gibt keine fehlende oder extra Steckdose, und es ist richtig für die Vorbereitungsfunktion benannt, um es zu fangen.

Das Problem tritt nur sporadisch auf, tritt jedoch zuverlässig auf, wenn Sie häufig hintereinander starten / abbrechen.

Hier sind die Screenshots. Ich werde dir den schwarzen Bildschirm nicht zeigen. Es ist nur schwarz mit dem Träger und der Zeit.

    
Carlos 29.01.2016, 14:58
quelle

1 Antwort

0

Ich habe es gelöst. Die Überprüfung der Speichernutzung erwies sich als sehr nützlich.

Der graue Bereich sollte durch einen großen Hintergrund mit gezeichneten Linien ausgefüllt sein. Es stellt sich heraus, dass die naive Implementierung von drawBackground dazu führt, dass sich die Speichergröße auf über 200 MB erhöht. Ich ersetzte es durch eine CSTiledLayer, und jetzt braucht es ein paar MB.

    
Carlos 23.02.2016, 07:09
quelle

Tags und Links