cocoa - Cacau: Eu tenho a entrada do meu usuário - E agora? - CoreDump.pt
Cacau: Eu tenho a entrada do meu usuário - E agora?
Em poucas palavras o que o meu programa faz é: ele executa e leva a entrada do usuário periodicamente usando NSWindow (que é controlada pelo meu objeto NSWindowController) e continua a execução.
aqui está a minha myController.mm que está chamando e mostrar a janela para receber a entrada de usuário:
aqui é o meu código nswindowcontroller objeto:
depois que eu clique no botão OK ou Cancelar, o respectivo método IBAction está sendo chamado e está sendo executado conforme exigido ou seja, ele está mostrando a janela levando a entrada do usuário do campo de texto, depois clicar em ok ele está atualizando a senha também. Mas depois que ele termina a execução do método IBAction emOK, ele deve voltar para myController.mm e recuperar a senha executando a próxima instrução NSString * inputPassword = [senha encPassController]; o que não está acontecendo. Por favor anone pode sugerir uma maneira de lidar com esta situação.
Graças Bob para a resposta. Agora eu entendia que meu erro foi. Assim i tentou o método de notificação usando um laço enquanto como mostrado:
no meio do meu programa, de modo a esperar até que a notificação vem e define a variável bool para true. Mas agora o problema é que ele está entrando em loop infinito e minha applicaton é ficar preso.
há nada como o equivalente MFC onde espera directamente para a entrada do usuário. Realmente é que difícil criar uma janela e obter entrada do usuário ou estou realmente faltando alguma coisa aqui ????
Publicado 26/08/2009 em 23:38 2009-08-26 23:38
fonte usuário King
Seu problema é que '- [NSWindowController SHOWWINDOW:]' não bloqueia aguardando pela entrada janela. Você chama isso, o que diz seu aplicativo para mostrar a janela, mas então imediatamente executa a próxima linha, a definição da senha a zero, uma vez que não foi definido ainda.
O IBAction ocorre durante um Run loop . Basicamente, o fluxo de seu aplicativo é:
Inicializar App Controller -> mostrar a janela - password> definir a zero -> executar o Run loop um monte de tempo de espera para a entrada -> botão OK fica pressionado -> defina o campo controladores de senha -> voltar ao lacete prazo.
Você deve ler-se no prazo loops para tentar entender o que exatamente está acontecendo aqui. O link acima vai ensinar o que você precisa para aprender, e muito mais. Não é multithreaded, mas não está em execução na ordem que você espera. Basicamente, você precisa reorganizar-lo de tal forma que em myController.mm, você espera para a entrada. Isso poderia ser feito por meio de Notificações , ou apenas chamando um método no IBAction que indica ao controlador a senha foi alterada (que é essencialmente o que o Notificação faz).
Edit: Na verdade, uma vez que você corrigir isso, você deve ter certeza que você chama de 'reter' na senha que você começa durante a IBAction, caso contrário, você irá falhar uma vez que String Obtém autoreleased e você tentar acessá-lo. Guia de Gerenciamento de memória