saliente - no puedo enviar correos de mi iphone 6
"Wait_fences: no se ha podido recibir la respuesta: 10004003"? (18)
¡La solución está aquí!
Tuve el mismo error, ahora que tengo la solución, esto puede ser útil.
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
[self performSelector:@selector(YOUR_METHOD) withObject:nil afterDelay:0.1];
}
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 en el sitio de Apple, ni ninguna solución aquí o en Google.
Extrañamente, ocurre la situación opuesta si coloco 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 cada vez después. Esto me está causando un gran dolor de cabeza.
¿El campo de texto está dentro de esa vista, o dentro de otra cosa? 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 más bien en el widget que se está creando. Por ejemplo, si está agregando el campo de texto a una vista de alerta, porque el programa ocurre de manera asíncrona, puede que no esté activo cuando llame al convertidor de frecuencia 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 el viewDidAppear, establecería el campo de texto como el primero en responder en ese punto).
Alertview o actionsheets deben mostrarse en los hilos principales ... por lo que si realiza conexiones sincrónicas y realiza esa operación en otro hilo y muestra alertas en función del resultado que recibió de esa operación, entonces obtendrá este mensaje de error wait_fences: no se pudo recibir respuesta: 10004003. Puedes hacer algo como ....
[self performSelectotOnMainThread:@selector(handleOutput:) withObject:output waitUntilDone:YES/NO];
y mostrar alertas en el método handleOutput pasando la cadena de respuesta de salida como el parámetro.
Compruebe que solo está interactuando con la interfaz de usuario en el hilo principal. Recibí wait_fences: failed to receive reply: 10004003
mientras estaba allí esperando que se muestre UIAlertView durante unos 5 segundos porque el código correspondiente se ejecutó en una cadena de fondo. Puedes asegurarte poniendo tu código en bloque y enviándolo al hilo principal:
dispatch_async(dispatch_get_main_queue(), ^{
if (!success) {
// Inform user that import failed
UIAlertView * importFailedAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ErrorTitle5", @"Import failed")
message:NSLocalizedString(@"Error5", @"Something went wrong")
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", nil)
otherButtonTitles:nil];
[importFailedAlert show];
}
});
Consulte 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.
Después de algunas pruebas, la gran regla es: "No realizar animación antes de la salida animada o espectáculo animado".
Por ejemplo:
- no
-dismissModalViewControllerAnimated:YES
después de la devolución de llamada de la delegación de unUIAlertView -alertView:
will
DismissWithButtonIndex:
(espere el fundido de la vista de alerta antes de hacer esto con el-alertView:
did
DismissWithButtonIndex:
callback) - no intente mostrar el teclado (
becomeFirstResponder
) antes de que su controlador de vista esté en pantalla.
Cosas malas pueden suceder.
Espero que sea útil ;-)
Después de probar todo lo que pude encontrar en Google y nada funcionaba, esto fue lo que me solucionó el problema. La clave es que estoy haciendo esto en el método de delegado willDismissWithButtonIndex. Antes lo estaba haciendo en otro lado.
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
[myTextField resignFirstResponder];
[myTextField removeFromSuperview];
[myTextField release];
}
El problema es que hay una condición de carrera en el código de Apple. Por lo general, esto tiene que ver con actualizaciones de IU incorrectas.
En mi experiencia, no has llamado al súper en viewDidAppear, viewWillAppear, etc. O intentas mostrar un UIAlertView en viewDidLoad o viewWillAppear.
Cuando agrega un UIAlertView, el marco necesita una referencia a su vista principal. Pero si se encuentra 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.
Esto funcionó para que el teclado se muestre inmediatamente, sin animación ni demora.
Deje textField
ser una variable de instancia de MyViewController
(una subclase de UIViewController
).
Llame a [textField becomeFirstResponder]
en initWithNibName:bundle:
(para una subclase de UIViewController
) o initWithStyle:
(para una subclase de UITableViewController
), no en viewDidLoad
. P.ej:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[textField becomeFirstResponder];
}
return self;
}
O bien, llámalo justo después de inicializar pero antes de presionar el UIViewController
. P.ej:
MyViewController *viewController = [[MyViewController alloc] init];
[viewController.textField becomeFirstResponder];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
Has hecho [textfield becomeFirstResponder];
Y después de obtener el valor del campo de texto en su código, haga [textfield resignFirstResponder];
. Eso te ayudará, creo.
Me estaba dando un error similar cuando rápidamente:
- Descartar una vista modal
- Actualizando la vista principal
- Presentando una nueva vista modal
Noté que solo lo conseguía en el simulador y no en el dispositivo. Además, me atraparon 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 causó algunas condiciones de carrera en el código de Apple.
Con eso en mente, intente esto:
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1];
}
Es posible que tenga problemas para presentar el teclado de un UITextField que aún no aparece en la pantalla. Esto puede estar causando problemas similares a los míos.
Además, pausas para darle a la jerarquía tiempo para actualizar antes de presentar el teclado, por las dudas.
Espero que esto ayude.
Override -viewDidAppear:
not -viewWillAppear
, y asegúrese de llamar a [super viewDidAppear:]
. No debe realizar animaciones cuando no está en la pantalla ("aparecerá"). Y the -viewDidAppear:
docs explica que debes llamar a super
porque tienen sus propias cosas para hacer.
Puedo simular este uno a uno por medio de este código UIAlertView.
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"defineTitle",@"defineTitle")
message:NSLocalizedString(@"defineBody", @"defineBody")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Ok", @"Ok")
otherButtonTitles:nil];
[alert show];
Cuando NSLocalizedString no está definido en el archivo Localizable.strings tardará mucho en buscar los textos, 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 fueron resueltos. Tal vez este es también el caso de otras ocurrencias?
Si está ejecutando el actual iPhone Simulator 4.0, 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 arreglarse pronto.
Si tiene la siguiente línea en viewDidLoad, puede causar este mensaje. Comenta la siguiente línea.
[[UIApplication sharedApplication] setStatusBarHidden:YES]; //This line should be commented
(En su lugar, puede deshabilitar la barra de estado del archivo plist de la aplicación).
También con UIAlertView. Lo que me solucionó fue tener la renuncia como se muestra a continuación, como se mencionó antes en los warehouselabs.
- (void)didPresentAlertView:(UIAlertView *)alertView
{
[txtListingPassword becomeFirstResponder];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
[txtListingPassword resignFirstResponder];
}
Los otros delegados de UIAlertViewDelegate no corrigieron el problema.
También recibí el mensaje wait_fences: failed to receive reply: 10004003
y mis viewWill...
y viewDid...
no hacen más que enviar mensajes a super
. En mi caso sucede cuando tengo un UIAlertView
en mi GameViewController
y el usuario presiona el botón de dispositivo redondo de iPhone y luego regresa a la aplicación. Esto parece fuera de mis manos.
anula viewDidappear
, no viewWillAppear
:
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear:animated];
[myTextField becomeFirstResponder];
}