Recibo este error críptico la primera vez (y solo la primera vez) que mi vista se carga debido a la siguiente línea de código:
- (void)viewWillAppear:(BOOL)animated
{
[textField becomeFirstResponder];
}
Hay un retraso notable (~ 3 - 4 segundos, incluso en el simulador) debido a esto que hace que mi aplicación no responda. ¿Alguien sabe cómo arreglar esto? No puedo encontrar ninguna documentación sobre él en el sitio de Apple, ni ninguna solución aquí o en Google.
Curiosamente, ocurre la situación opuesta si pongo la línea en -viewDidAppear:
lugar de -viewWillAppear:
; es decir, en lugar de imprimir el error solo la primera vez que se muestra el teclado y nunca más, el error no se imprime la primera vez sino todas las veces posteriores. Esto me está causando un gran dolor de cabeza.
fuente
becomeFirstResponder
mostrar el teclado inmediatamente, sin demora .Recibí un error similar cuando rápidamente:
Noté que solo lo estaba obteniendo en el simulador y no en el dispositivo. Además, estaba atrapado en un bucle infinito.
Mi solución fue retrasar la presentación de la nueva vista modal. Parece que la actualización rápida de la jerarquía de vistas provocó algunas condiciones de carrera en el código de Apple.
Con eso en mente, intente esto:
Es posible que tenga problemas al presentar el teclado para un UITextField que aún no está en la pantalla. Esto puede estar causando problemas similares al mío.
Además, hace una pausa para que la jerarquía se actualice antes de presentar el teclado, por si acaso.
Espero que esto ayude.
fuente
Compruebe que solo está interactuando con la interfaz de usuario en el hilo principal. Recibí
wait_fences: failed to receive reply: 10004003
mientras estaba sentado allí esperando que se mostrara un UIAlertView durante unos 5 segundos porque el código relevante se ejecutó en un hilo de fondo. Puede asegurarse colocando su código en bloque y enviándolo al hilo principal:fuente
Después de probar todo lo que pude encontrar en Google y nada de eso funcionó, esto es lo que me resolvió el problema. La clave es que estoy haciendo estas cosas en el método delegado willDismissWithButtonIndex. Antes lo hacía en otra parte.
fuente
Si tiene la siguiente línea en viewDidLoad, puede causar este mensaje. Comente la siguiente línea.
(En su lugar, puede desactivar la barra de estado del archivo plist de la aplicación).
fuente
Después de algunas pruebas, la gran regla es: "No realizar animaciones antes de la salida animada o del espectáculo animado".
Por ejemplo:
-dismissModalViewControllerAnimated:YES
después de la devolución de llamada de delegación de un (espere el desvanecimiento de la vista de alerta antes de hacer esto usando la devolución de llamada)UIAlertView -alertView:
will
DismissWithButtonIndex:
-alertView:
did
DismissWithButtonIndex:
becomeFirstResponder
) antes de que su controlador de vista esté en pantalla.Pueden pasar cosas malas.
Espero que te sea de utilidad ;-)
fuente
Esto funcionó para que el teclado se mostrara de inmediato, sin animación ni demora.
Sea
textField
una variable de instancia deMyViewController
(una subclase deUIViewController
).Llamar
[textField becomeFirstResponder]
eninitWithNibName:bundle:
(para una subclase deUIViewController
) oinitWithStyle:
(para una subclase deUITableViewController
), no enviewDidLoad
. P.ej:O llámelo justo después de inicializar, pero antes de presionar
UIViewController
. P.ej:fuente
view
, por lo que no es seguro que se haya cargado el archivo nib. SitextField
es un IBOutlet, entonces pensaría que sería nulo en este momento.Has hecho
[textfield becomeFirstResponder];
Y después de obtener el valor de textfield en su código, hágalo
[textfield resignFirstResponder];
. Eso te ayudará, creo.fuente
Si está ejecutando el iPhone Simulator 4.0 actual, este mensaje de error aparece con frecuencia al girar la pantalla (o al animar después de girar la pantalla) acompañado de un retraso de 1-2 segundos en las animaciones.
Es un error en esta versión del Simulador y debería corregirse pronto.
fuente
wait_fences
mensaje no apareció en el simulador 3.1Consulte aquí para obtener más información: http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/17373-wait_fences-failed-receive-reply-10004003-a.html
Tu problema está relacionado.
fuente
anular
viewDidappear
, noviewWillAppear
:fuente
Puedo simular este uno a uno por medio de este código UIAlertView.
Cuando NSLocalizedString no está definido en el archivo Localizable.strings, la búsqueda de los textos llevará mucho tiempo, por lo que se mostrará la alerta y se mostrará "wait_fences: no se pudo recibir la respuesta: 10004003".
Para mí solo tuve que agregar los textos a los archivos Localizable.strings y mis problemas se resolvieron. ¿Quizás este sea también el caso de otras ocurrencias?
fuente
También con UIAlertView. Lo que me resolvió fue tener la renuncia como se muestra a continuación, como Warehouselabs mencionó anteriormente.
Los otros delegados de UIAlertViewDelegate no solucionaron el problema.
fuente
El problema es que hay una condición de carrera en el código de Apple. Normalmente, esto tiene que ver con actualizaciones incorrectas de la interfaz de usuario.
En mi experiencia, no ha llamado al super en viewDidAppear, viewWillAppear, etc. O intenta mostrar un UIAlertView en viewDidLoad o viewWillAppear.
Cuando agrega un UIAlertView, el marco necesita una referencia a su vista principal. Pero si está en viewWillAppear o viewDidLoad, la vista no se muestra realmente ... Debería considerar mover el código a viewDidAppear donde la vista está lista para ser utilizada por UIAlertView.
fuente
¿El campo de texto está contenido en esa vista o en algo más? Solo puede enviar el 'BecomeFirstRepsonder' a algo que esté contenido directamente dentro de esa vista. Si está almacenado en algún otro componente del widget, no debe establecer el estado del primer respondedor en este widget, sino en el widget que se está creando. Por ejemplo, si está agregando el campo de texto a una vista de alerta, debido a que el programa ocurre de forma asincrónica, es posible que no esté activo para cuando llame a BecomeFirstResponder. (Idealmente, tendría su propia clase de vista de alerta y definiría el campo de texto dentro de eso, y cuando esa vista reciba viewDidAppear, establecería el campo de texto como primer respondedor en ese punto).
fuente
También recibo el mensaje
wait_fences: failed to receive reply: 10004003
y mis métodosviewWill...
yviewDid...
no hacen nada más que enviar mensajes asuper
. En mi caso, sucede cuando tengo unaUIAlertView
visualización en miGameViewController
y el usuario presiona el botón del dispositivo redondo del iPhone y luego regresa a la aplicación. Esto parece fuera de mis manos.fuente
La vista de alerta o las hojas de acciones deben mostrarse en los subprocesos principales ... por lo que si realiza alguna conexión síncrona y realiza esa operación en otro subproceso y muestra alertas sobre la base de la salida que recibió de esa operación, recibirá este mensaje de error wait_fences: no se pudo recibir respuesta: 10004003. Puedes hacer algo como ...
y mostrar alertas en el método handleOutput pasando la cadena de respuesta de salida como parámetro.
fuente
¡La solución está aquí!
Tuve el mismo error, ahora tengo la solución, esto puede ayudarte.
fuente