it-swarm.com.de

Meine App bleibt stehen, aber es wird kein Fehler angezeigt

Weiß jemand, was ich überprüfen muss, wenn meine App einfriert? Ich meine, ich kann die App auf dem iPad-Bildschirm sehen, aber keine Schaltflächen reagieren. Ich habe versucht, den Code zu debuggen, wenn ich auf die Schaltfläche klicke, aber ich habe noch nichts gesehen. Ich las über die Instrumente. Wie verwende ich sie speziell?

Kann mir jemand helfen? Ich brauche nur eine Erklärung, wie die Werkzeuge verwendet werden.

28
Vanjo

Es klingt, als hätten Sie den Haupt-Thread irgendwie blockiert. Führen Sie zum Debuggen die App im Debugger aus. Wenn die App einfriert, drücken Sie die Pausentaste oberhalb des Protokollbereichs unten in Xcode. Auf der linken Seite sehen Sie genau, was der Thread gerade macht, und Sie können sehen, wo er hängen bleibt.

 pause button

Wahrscheinlich entweder eine lange Schleife im Haupt-Thread oder ein Sync-Deadlock.

80
Ben Baron

Neben dem Anhalten und Verfolgen des Stacktraces denke ich als zusätzliche Sache, den Code zu überprüfen, ob es eine Schleife gibt, die die App einfriert. 

Ich hatte kürzlich ein ähnliches Problem, aber die Stapelverfolgung half nicht viel, ich fand heraus, dass ich eine endlose Schleife hatte, als ich eine reloadData()-Methode in layoutsubviews aufrief.

0
sheinix

Ich habe einen ähnlichen Fall in meinem Projekt und der Grund war ein anderer Entwickler, der setNeedsLayout() innerhalb der Methode layoutSubviews() hinzugefügt hat. Dadurch wird eine Endlosschleife erstellt und die App eingefroren.

0

Top Antwort ist richtig. Sie können dies mit der Option "Pause" debuggen. Die gebräuchlichste Methode zum Blockieren des Hauptthreads ist der Aufruf von dispatch_sync in demselben Thread, den Sie versenden. Manchmal rufen Sie denselben Code aus dispatch_once auf.

0