J'obtiens cette erreur cryptique la première fois (et seulement la première fois) ma vue est chargée en raison de la ligne de code suivante:
- (void)viewWillAppear:(BOOL)animated
{
[textField becomeFirstResponder];
}
Il y a un retard notable (~ 3 à 4 secondes, même sur le simulateur) à cause de cela qui fait que mon application ne répond pas. Est-ce que quelqu'un sait comment réparer ceci? Je ne trouve aucune documentation à ce sujet sur le site d'Apple, ni aucune solution ici ou sur Google.
Étrangement, la situation inverse se produit si je mets la ligne au -viewDidAppear:
lieu de -viewWillAppear:
; c'est-à-dire qu'au lieu d'imprimer l'erreur uniquement la première fois que le clavier est affiché et plus jamais, l'erreur n'est pas imprimée la première fois mais à chaque fois après. Cela me cause un mal de tête majeur.
la source
becomeFirstResponder
afficher le clavier immédiatement, sans délai .J'obtenais une erreur similaire lorsque rapidement:
J'ai remarqué que je ne l'obtenais que dans le simulateur et non sur l'appareil. De plus, je me faisais prendre dans une boucle infinie.
Ma solution a été de retarder la présentation de la nouvelle vue modale. Il semble que la mise à jour rapide de la hiérarchie des vues ait causé une certaine condition de concurrence dans le code d'Apple.
Dans cet esprit, essayez ceci:
Vous rencontrez peut-être des problèmes pour présenter le clavier d'un UITextField qui n'est pas encore à l'écran. Cela peut causer des problèmes similaires aux miens.
En outre, vous faites une pause pour donner à la hiérarchie le temps de se mettre à jour avant de présenter le clavier, au cas où.
J'espère que cela t'aides.
la source
Vérifiez que vous n'interagissez qu'avec l'interface utilisateur sur le thread principal. Je suis
wait_fences: failed to receive reply: 10004003
resté assis là en attendant qu'un UIAlertView s'affiche pendant environ 5 secondes car le code correspondant a été exécuté sur un thread d'arrière-plan. Vous pouvez vous en assurer en mettant votre code en bloc et en l'envoyant au thread principal:la source
Après avoir essayé tout ce que je pouvais trouver sur Google et que rien de tout cela ne fonctionnait, c'est ce qui a résolu le problème pour moi. La clé est que je fais ce genre de choses dans la méthode déléguée willDismissWithButtonIndex. Avant je le faisais ailleurs.
la source
Si vous avez la ligne suivante dans viewDidLoad, cela peut provoquer ce message. Commentez la ligne suivante.
(Vous pouvez désactiver la barre d'état à partir du fichier plist de l'application à la place).
la source
Après quelques tests, la grande règle est la suivante: "Ne pas effectuer d'animation avant le licenciement animé ou le spectacle animé.".
Par exemple:
-dismissModalViewControllerAnimated:YES
après le rappel de délégation d'un (attendez le fondu hors de la vue d'alerte avant de faire cela en utilisant le rappel)UIAlertView -alertView:
will
DismissWithButtonIndex:
-alertView:
did
DismissWithButtonIndex:
becomeFirstResponder
) avant que votre contrôleur de vue soit à l'écran.De mauvaises choses peuvent arriver.
J'espère que ce sera utile ;-)
la source
Cela a fonctionné pour moi pour que le clavier se montre immédiatement, sans animation ni retard.
Laisser
textField
une variable d'instance deMyViewController
(une sous-classe deUIViewController
).Appel
[textField becomeFirstResponder]
àinitWithNibName:bundle:
(pour une sous - classe deUIViewController
) ouinitWithStyle:
(pour une sous - classe deUITableViewController
), nonviewDidLoad
. Par exemple:Ou appelez-le juste après l'initialisation mais avant d'appuyer sur le
UIViewController
. Par exemple:la source
view
, il n'est donc pas certain que le fichier nib ait été chargé. SitextField
c'est un IBOutlet, alors je pense que ce serait nul à ce stade.Vous avez fait
[textfield becomeFirstResponder];
Et après avoir obtenu la valeur de textfield dans votre code, faites
[textfield resignFirstResponder];
. Cela vous aidera, je pense.la source
Si vous exécutez l'actuel iPhone Simulator 4.0, ce message d'erreur apparaît fréquemment lors de la rotation de l'écran (ou lors de l'animation après la rotation de l'écran) accompagné d'un décalage de 1 à 2 secondes dans les animations.
C'est un bogue dans cette version du simulateur et devrait être corrigé bientôt.
la source
wait_fences
message n'est pasVoir ici pour plus d'informations: http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/17373-wait_fences-failed-receive-reply-10004003-a.html
Votre problème est lié.
la source
remplacer
viewDidappear
, pasviewWillAppear
:la source
Je peux simuler ce tête-à-tête au moyen de ce code UIAlertView.
Lorsque les NSLocalizedString ne sont pas définis dans le fichier Localizable.strings, la recherche des textes prendra trop de temps, donc l'alerte s'affichera et le message «wait_fences: failed to receive reply: 10004003» sera affiché.
Pour moi, je n'avais qu'à ajouter les textes aux fichiers Localizable.strings et mes problèmes ont été résolus. Peut-être que c'est également le cas pour d'autres occurrences?
la source
Également avec le UIAlertView. Ce qui a résolu le problème pour moi, c'est d'avoir la démission comme ci-dessous, comme Warehouselabs mentionné plus tôt.
Les autres délégués de UIAlertViewDelegate n'ont pas résolu le problème.
la source
Le problème est qu'il y a une condition de concurrence dans le code d'Apple. Habituellement, cela a quelque chose à voir avec des mises à jour incorrectes de l'interface utilisateur.
Dans mon expérience, soit vous n'avez pas appelé le super dans viewDidAppear, viewWillAppear etc. Ou vous essayez d'afficher un UIAlertView dans viewDidLoad ou viewWillAppear.
Lorsque vous ajoutez un UIAlertView, l'infrastructure a besoin d'une référence à votre vue parent. Mais si vous êtes dans viewWillAppear ou viewDidLoad, la vue n'est pas réellement affichée ... Vous devriez envisager de déplacer le code vers viewDidAppear où la vue est prête à être utilisée par UIAlertView.
la source
Le champ de texte est-il contenu dans cette vue ou dans quelque chose d'autre? Vous ne pouvez envoyer le 'devenirFirstRepsonder' qu'à quelque chose qui est contenu directement dans cette vue. S'il est stocké dans un autre composant de widget, vous ne devez pas définir le statut de premier répondeur dans ce widget, mais plutôt dans le widget en cours de création. Par exemple, si vous ajoutez le champ de texte à une vue d'alerte, parce que l'émission se déroule de manière asynchrone, il se peut qu'elle ne soit pas active au moment où vous appelez le devenirFirstResponder. (Idéalement, vous auriez votre propre classe de vue d'alerte et définiriez le champ de texte à l'intérieur, et lorsque cette vue reçoit le viewDidAppear, vous définissez le champ de texte comme premier répondeur à ce stade.)
la source
Je reçois également le message
wait_fences: failed to receive reply: 10004003
et mes méthodesviewWill...
etviewDid...
ne font rien d'autre qu'à envoyer des messagessuper
. Dans mon cas, cela se produit lorsque j'ai unUIAlertView
affichage dans monGameViewController
et que l'utilisateur appuie à la place sur le bouton rond de l'iPhone, puis revient à l'application. Cela semble hors de mes mains.la source
Alertview ou actionsheets doivent être affichés sur les threads principaux ... donc si vous établissez des connexions synchrones et effectuez cette opération sur un autre thread et affichez des alertes sur la base de la sortie que vous avez reçue de cette opération, vous obtiendrez ce message d'erreur wait_fences: failed to recevoir la réponse: 10004003. Vous pouvez faire quelque chose comme ...
et afficher les alertes dans la méthode handleOutput en passant la chaîne de réponse de sortie comme paramètre.
la source
La solution est là!
J'ai eu la même erreur, maintenant j'ai la solution, cela peut vous aider.
la source