3 Stimmen

App empfängt keine Daten mehr vom Socket, wenn UI scrollt

Ich habe eine iPad-App, die Daten über UDP-Sockets empfängt. Und es hat eine UIWebView, um Webseiten zu durchsuchen. Aber während des Scrollens in der UIWebView, friert alles ein und es werden keine Daten empfangen. Ich habe nachgeforscht und es hat etwas mit Runloops und Threads zu tun. Aber wenn die UIWebView nicht in einem anderen Thread als dem Haupt-Thread ausgeführt werden kann, wie kann ich dann Daten empfangen, während ich scrolle? Es ist wichtig, dass ich weiterhin Daten erhalte.

Das Projekt verwendet die AsyncUdpSocket-Klasse aus Cocoa AsyncSocket das sehr gut funktioniert. Und auch die Singleton-Klasse von Matt Gallagher . Alles läuft im Hauptthread, UDP-Empfang und UI.

Vielen Dank im Voraus!

1voto

Brandon A Punkte 916

Wenn Sie einen Bildlauf durchführen, wechselt die Runloop in einen anderen Modus ( UITrackingRunLoopMode ) und reagiert nicht mehr auf Netzwerkaktivitäten auf dem Hauptthread. Dies geschieht aus Leistungsgründen.

Sie sollten in der Lage sein, diese Aktualisierungen mit dem richtigen Runloop-Modus zu planen ( UITrackingRunLoopMode glaube ich). Allerdings würde ich das nicht empfehlen.

Versuchen Sie stattdessen, Ihren UDP-Netzwerkcode auf einem anderen Thread (oder einer Warteschlange, yay GCD!) einzurichten und Rückrufe auf dem Hauptthread zur Aktualisierung der Benutzeroberfläche zu planen. Dadurch wird sichergestellt, dass der Netzwerk-Thread den richtigen Runloop-Modus hat, wenn er Daten auf dem Socket zurückbekommt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X