Ich erhalte diesen kryptischen Fehler beim ersten (und nur beim ersten Mal) Laden meiner Ansicht aufgrund der folgenden Codezeile:
- (void)viewWillAppear:(BOOL)animated
{
[textField becomeFirstResponder];
}
Aufgrund dessen tritt eine merkliche Verzögerung (~ 3 - 4 Sekunden, sogar auf dem Simulator) auf, die dazu führt, dass sich meine App nicht mehr reagiert. Weiß jemand, wie man das behebt? Ich kann keine Dokumentation auf der Apple-Website oder Lösungen hier oder bei Google finden.
Seltsamerweise passiert die gegenteilige Situation, wenn ich die Zeile -viewDidAppear:
anstelle von -viewWillAppear:
; Das heißt, anstatt den Fehler nur beim ersten Anzeigen der Tastatur und nie wieder zu drucken , wird der Fehler nicht beim ersten Mal, sondern jedes Mal danach gedruckt. Dies bereitet mir große Kopfschmerzen.
quelle
becomeFirstResponder
bereitgestellt , um die Tastatur sofort und ohne Verzögerung anzuzeigen .Ich bekam schnell einen ähnlichen Fehler:
Ich bemerkte, dass ich es nur im Simulator und nicht auf dem Gerät bekam. Außerdem geriet ich in eine Endlosschleife.
Meine Lösung bestand darin, die Präsentation der neuen modalen Ansicht zu verzögern. Es scheint, dass das schnelle Aktualisieren der Ansichtshierarchie zu einigen Rassenbedingungen im Apple-Code geführt hat.
Versuchen Sie in diesem Sinne Folgendes:
Möglicherweise haben Sie Probleme beim Anzeigen der Tastatur für ein UITextField, das noch nicht auf dem Bildschirm angezeigt wird. Dies kann ähnliche Probleme wie ich verursachen.
Außerdem halten Sie an, um der Hierarchie Zeit zum Aktualisieren zu geben, bevor Sie die Tastatur für alle Fälle anzeigen.
Hoffe das hilft.
quelle
Überprüfen Sie, ob Sie nur mit der Benutzeroberfläche im Hauptthread interagieren. Ich habe
wait_fences: failed to receive reply: 10004003
während ich dort saß und darauf gewartet, dass ein UIAlertView für ungefähr 5 Sekunden angezeigt wird, weil der relevante Code in einem Hintergrundthread ausgeführt wurde. Sie können dies sicherstellen, indem Sie Ihren Code blockieren und an den Hauptthread senden:quelle
Nachdem ich alles ausprobiert hatte, was ich bei Google finden konnte und nichts davon funktionierte, löste dies das Problem für mich. Der Schlüssel ist, dass ich dieses Zeug in der willDismissWithButtonIndex-Delegatenmethode mache. Bevor ich es woanders gemacht habe.
quelle
Wenn in viewDidLoad die folgende Zeile angezeigt wird, kann dies zu dieser Meldung führen. Kommentieren Sie die folgende Zeile.
(Sie können stattdessen die Statusleiste in der Anwendungsplist-Datei deaktivieren.)
quelle
Nach einigen Tests lautet die große Regel: "Führen Sie keine Animation vor der animierten Entlassung oder animierten Show durch."
Beispielsweise:
-dismissModalViewControllerAnimated:YES
nach dem Delegierungsrückruf von an (warten Sie, bis die Warnansicht ausgeblendet ist, bevor Sie den Rückruf verwenden).UIAlertView -alertView:
will
DismissWithButtonIndex:
-alertView:
did
DismissWithButtonIndex:
becomeFirstResponder
) anzuzeigen, bevor Ihr View Controller auf dem Bildschirm angezeigt wird.Es können schlimme Dinge passieren.
Hoffe es wird nützlich sein ;-)
quelle
Dies funktionierte für mich, damit sich die Tastatur sofort ohne Animation oder Verzögerung zeigte.
Sei
textField
eine Instanzvariable vonMyViewController
(eine Unterklasse vonUIViewController
).Rufen Sie
[textField becomeFirstResponder]
aninitWithNibName:bundle:
(für eine Unterklasse vonUIViewController
) oderinitWithStyle:
(für eine Unterklasse vonUITableViewController
), nicht inviewDidLoad
. Z.B:Oder rufen Sie es kurz nach der Initialisierung auf, aber bevor Sie die Taste drücken
UIViewController
. Z.B:quelle
view
, daher ist es nicht sicher, ob die NIB-Datei geladen wurde. WenntextField
es sich um ein IBOutlet handelt, würde ich denken, dass es an dieser Stelle gleich Null ist.Du hast gemacht
[textfield becomeFirstResponder];
Und nachdem Sie den Wert aus dem Textfeld in Ihrem Code erhalten haben, tun Sie dies
[textfield resignFirstResponder];
. Das wird dir helfen, denke ich.quelle
Wenn Sie den aktuellen iPhone Simulator 4.0 ausführen, wird diese Fehlermeldung häufig angezeigt, wenn Sie den Bildschirm drehen (oder wenn Sie nach dem Drehen des Bildschirms animieren), und die Animationen verzögern sich um 1-2 Sekunden.
Es ist ein Fehler in dieser Version des Simulators und sollte bald behoben werden.
quelle
wait_fences
Nachricht nicht im 3.1-SimulatorWeitere Informationen finden Sie hier: http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/17373-wait_fences-failed-receive-reply-10004003-a.html
Ihr Problem hängt zusammen.
quelle
überschreiben
viewDidappear
, nichtviewWillAppear
:quelle
Mit diesem UIAlertView-Code kann ich dies eins zu eins simulieren.
Wenn die NSLocalizedString nicht in der Datei Localizable.strings definiert sind, dauert die Suche nach den Texten zu lange. Daher wird die Warnung angezeigt und die Meldung "wait_fences: Antwort konnte nicht empfangen werden: 10004003" angezeigt.
Für mich musste ich nur die Texte zu den Localizable.strings-Dateien hinzufügen und meine Probleme wurden gelöst. Vielleicht ist dies auch bei anderen Ereignissen der Fall?
quelle
Auch mit dem UIAlertView. Was es für mich gelöst hat, war der Rücktritt wie unten erwähnt, wie bereits erwähnt.
Die anderen Delegierten von UIAlertViewDelegate haben das Problem nicht behoben.
quelle
Das Problem ist, dass der Apple-Code eine Race-Bedingung enthält. Normalerweise hat dies mit falschen UI-Updates zu tun.
Nach meiner Erfahrung haben Sie das Super entweder in viewDidAppear, viewWillAppear usw. nicht aufgerufen, oder Sie versuchen, eine UIAlertView in viewDidLoad oder viewWillAppear anzuzeigen.
Wenn Sie eine UIAlertView hinzufügen, benötigt das Framework einen Verweis auf Ihre übergeordnete Ansicht. Wenn Sie sich jedoch in viewWillAppear oder viewDidLoad befinden, wird die Ansicht nicht angezeigt. Sie sollten in Betracht ziehen, den Code nach viewDidAppear zu verschieben, wo die Ansicht für die Verwendung durch UIAlertView bereit ist.
quelle
Ist das Textfeld in dieser Ansicht oder in etwas anderem enthalten? Sie können den 'comeFirstRepsonder' nur an etwas senden, das direkt in dieser Ansicht enthalten ist. Wenn es in einer anderen Widget-Komponente gespeichert ist, sollten Sie den Ersthelfer-Status nicht in diesem Widget festlegen, sondern in dem Widget, das erstellt wird. Wenn Sie beispielsweise das Textfeld zu einer Warnansicht hinzufügen, weil die Show asynchron erfolgt, ist sie möglicherweise nicht aktiv, wenn Sie den makeFirstResponder aufrufen. (Idealerweise verfügen Sie über eine eigene Klasse für Warnungsansichten und definieren das Textfeld darin. Wenn diese Ansicht viewDidAppear empfängt, legen Sie das Textfeld an diesem Punkt als Ersthelfer fest.)
quelle
Ich bekomme auch die Nachricht
wait_fences: failed to receive reply: 10004003
und meineviewWill...
undviewDid...
Methoden tun nichts anderes als Nachrichten an zu sendensuper
. In meinem Fall passiert es, wenn ich eineUIAlertView
Anzeige in meinem habeGameViewController
und der Benutzer stattdessen die runde iPhone-Gerätetaste drückt und dann zur App zurückkehrt. Das sieht aus meinen Händen.quelle
Warnungsansicht oder Aktionsblätter sollten in Hauptthreads angezeigt werden. Wenn Sie also synchrone Verbindungen herstellen und diese Operation in einem anderen Thread ausführen und Warnungen auf der Grundlage der Ausgabe anzeigen, die Sie von dieser Operation erhalten haben, wird die Fehlermeldung wait_fences: failed to angezeigt Antwort erhalten: 10004003. Sie können so etwas tun wie ...
und zeigen Sie Warnungen in der handleOutput-Methode an, indem Sie die Ausgabeantwortzeichenfolge als Parameter übergeben.
quelle
Lösung ist da!
Ich hatte den gleichen Fehler, jetzt habe ich die Lösung, das kann Ihnen helfen.
quelle