Recebo este erro enigmático na primeira vez (e apenas na primeira vez) em que minha visualização é carregada devido à seguinte linha de código:
- (void)viewWillAppear:(BOOL)animated
{
[textField becomeFirstResponder];
}
Há um atraso perceptível (cerca de 3 a 4 segundos, mesmo no simulador) devido a isso que faz com que meu aplicativo pare de responder. Alguém sabe como consertar isso? Não consigo encontrar nenhuma documentação sobre ele no site da Apple, ou quaisquer soluções aqui ou no Google.
Estranhamente, a situação oposta acontece se eu colocar a linha em -viewDidAppear:
vez de -viewWillAppear:
; ou seja, em vez de imprimir o erro apenas na primeira vez que o teclado é mostrado e nunca mais, o erro não é impresso na primeira vez, mas sempre depois. Isso está causando uma grande dor de cabeça para mim.
fonte
becomeFirstResponder
mostrar o teclado imediatamente, sem demora .Eu estava recebendo um erro semelhante quando rapidamente:
Percebi que só estava conseguindo no simulador e não no aparelho. Além disso, eu estava sendo pego em um loop infinito.
Minha solução foi atrasar a apresentação da nova visão modal. Parece que atualizar rapidamente a hierarquia de visualizações causou algum problema de corrida no código da Apple.
Com isso em mente, tente o seguinte:
Você pode estar tendo problemas para apresentar o teclado para um UITextField que ainda não está na tela. Isso pode estar causando problemas semelhantes aos meus.
Além disso, você faz uma pausa, dando tempo para que a hierarquia seja atualizada antes de apresentar o teclado, apenas para garantir.
Espero que isto ajude.
fonte
Verifique se você está interagindo apenas com a IU no thread principal. Eu fiquei
wait_fences: failed to receive reply: 10004003
sentado lá esperando um UIAlertView ser mostrado por cerca de 5 segundos porque o código relevante foi executado em um thread de segundo plano. Você pode ter certeza colocando seu código em bloco e enviando-o para o thread principal:fonte
Depois de tentar tudo que pude encontrar no Google e nada funcionou, foi isso que resolveu o problema para mim. O importante é que estou fazendo isso no método de delegado willDismissWithButtonIndex. Antes eu estava fazendo isso em outro lugar.
fonte
Se você tiver a seguinte linha em viewDidLoad, pode causar esta mensagem. Comente a seguinte linha.
(Você pode desativar a barra de status do arquivo plist do aplicativo).
fonte
Depois de alguns testes, a grande regra é: "Não execute a animação antes da dispensa da animação ou do show animado.".
Por exemplo:
-dismissModalViewControllerAnimated:YES
após o retorno de chamada de delegação de um (aguarde o desaparecimento da visualização de alerta antes de fazer isso usando o retorno de chamada)UIAlertView -alertView:
will
DismissWithButtonIndex:
-alertView:
did
DismissWithButtonIndex:
becomeFirstResponder
) antes que o controlador de visualização esteja na tela.Coisas ruins podem acontecer.
Espero que seja util ;-)
fonte
Isso funcionou para que o teclado se mostrasse imediatamente, sem animação ou atraso.
Let
textField
Ser uma variável de instância deMyViewController
(uma subclasse deUIViewController
).Chame
[textField becomeFirstResponder]
eminitWithNibName:bundle:
(para uma subclasse deUIViewController
) ouinitWithStyle:
(para uma subclasse deUITableViewController
), não emviewDidLoad
. Por exemplo:Ou chame-o logo após a inicialização, mas antes de enviar o
UIViewController
. Por exemplo:fonte
view
, então não tenho certeza se o arquivo nib foi carregado. SetextField
for um IBOutlet, então acho que seria nulo neste momento.Você fez
[textfield becomeFirstResponder];
E depois de obter o valor de textfield em seu código, faça
[textfield resignFirstResponder];
. Isso vai te ajudar, eu acho.fonte
Se você estiver executando o iPhone Simulator 4.0 atual, essa mensagem de erro aparecerá frequentemente ao girar a tela (ou ao animar após girar a tela) acompanhada por um atraso de 1-2 segundos nas animações.
É um bug nesta versão do Simulador e deve ser corrigido em breve.
fonte
wait_fences
mensagem não apareceu no simulador 3.1Veja aqui para mais informações: http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/17373-wait_fences-failed-receive-reply-10004003-a.html
Seu problema está relacionado.
fonte
substituir
viewDidappear
, nãoviewWillAppear
:fonte
Posso simular isso um-a-um por meio deste código UIAlertView.
Quando o NSLocalizedString não está definido no arquivo Localizable.strings demorará muito para pesquisar os textos, então o alerta aparecerá e o “wait_fences: failed to receive reply: 10004003” será mostrado.
Para mim, só precisei adicionar os textos aos arquivos Localizable.strings e meus problemas foram resolvidos. Talvez este também seja o caso para outras ocorrências?
fonte
Também com o UIAlertView. O que resolveu para mim foi pedir demissão conforme abaixo, conforme warehouselabs mencionado anteriormente.
Os outros delegados de UIAlertViewDelegate não corrigiram o problema.
fonte
O problema é que existe uma condição de corrida no código da Apple. Normalmente, isso tem a ver com atualizações incorretas da interface do usuário.
Na minha experiência, você não chamou o super em viewDidAppear, viewWillAppear etc. Ou você tenta exibir um UIAlertView em viewDidLoad ou viewWillAppear.
Quando você adiciona um UIAlertView, a estrutura precisa de uma referência para sua visualização pai. Mas se você estiver em viewWillAppear ou viewDidLoad, a visualização não é realmente exibida ... Você deve considerar mover o código para viewDidAppear, onde a visualização está pronta para ser usada por UIAlertView.
fonte
O campo de texto está contido nessa visualização ou em alguma outra coisa? Você só pode enviar o 'BecomeFirstRepsonder' para algo que está contido diretamente nessa visualização. Se estiver armazenado em algum outro componente do widget, você não deve definir o status do primeiro respondente neste widget, mas sim no widget que está sendo criado. Por exemplo, se você estiver adicionando o campo de texto a uma visualização de alerta, porque o show acontece de forma assíncrona, ele pode não estar ativo no momento em que você chamar o próximo se torneFirstResponder. (Idealmente, você teria sua própria classe de visualização de alerta e definiria o campo de texto dentro dela, e quando essa visualização recebesse viewDidAppear, você configuraria o campo de texto como o primeiro a responder nesse ponto.)
fonte
Eu também recebo a mensagem
wait_fences: failed to receive reply: 10004003
e meus métodosviewWill...
eviewDid...
não fazem nada além de enviar mensagens parasuper
. No meu caso, isso acontece quando eu tenho umaUIAlertView
exibição no meuGameViewController
e o usuário pressiona o botão redondo do dispositivo do iPhone e depois retorna ao aplicativo. Isso parece fora de minhas mãos.fonte
Alertview ou actionsheets devem ser mostrados nos threads principais ... então, se você estiver fazendo conexões síncronas e executando essa operação em outro thread e exibindo alertas com base na saída que você recebeu dessa operação, você receberá esta mensagem de erro wait_fences: failed to receber resposta: 10004003. Você pode fazer algo como ....
e mostra alertas no método handleOutput passando a string de resposta de saída como o parâmetro.
fonte
A solução está aqui!
Tive o mesmo erro, agora achei a solução, isso pode te ajudar.
fonte