Tuesday 20 March 2018

Waitforexpectationswithtimeout objective c


Introdução Objective-C é a linguagem de programação nativa para sistemas operacionais Apples iOS e OS X. É uma linguagem compilada, de propósito geral, capaz de construir tudo, desde utilitários de linha de comando até GUIs animadas para bibliotecas específicas de domínio. Ele também fornece muitas ferramentas para manter quadros grandes e escaláveis. Como C, Objective-C foi projetado para adicionar recursos orientados a objetos para C, mas as duas línguas realizaram isso usando filosofias fundamentalmente distintas. Objetivo-C é decididamente mais dinâmico, adiando a maioria de suas decisões para tempo de execução em vez de tempo de compilação. Isso se reflete em muitos padrões de design subjacentes ao desenvolvimento do iOS e OS X. Objective-C também é conhecido por suas convenções de nomeação detalhadas. O código resultante é tão descritivo que é praticamente impossível entender mal ou mal usá-lo. Por exemplo, o seguinte trecho mostra uma chamada de método C com seu equivalente Objective-C. Como você pode ver, os métodos Objective-C lêem mais como um idioma humano do que um computador. Depois de se acostumar com isso, torna-se muito fácil orientar-se em novos projetos e trabalhar com código de terceiros. Se você estiver um pouco desarmado pelos parênteses quadrados, não se preocupe. Você estará bastante confortável com eles até o final do tutorial. Estruturas Como a maioria das linguagens de programação, Objective-C é uma sintaxe relativamente simples, apoiada por uma extensa biblioteca padrão. Este tutorial se concentra principalmente na própria linguagem, mas ajuda a ter, pelo menos, alguma idéia das ferramentas com as quais você estará interagindo no mundo real. Há algumas bibliotecas padrão diferentes por aí, mas as combinações de maçãs Cocoa e Cocoa Touch são, de longe, as mais populares. Estes definem a API para criar aplicativos OS X e iOS, respectivamente. A tabela abaixo destaca alguns dos principais frameworks em Cocoa e Cocoa Touch. Para uma discussão mais detalhada, visite a Visão geral da tecnologia do Mac ou a Visão geral da tecnologia iOS. Tive o mesmo problema. A correção para mim pareceu estar aumentando o intervalo de tempo limite. Eu originalmente tinha um intervalo de tempo limite de 1 e aumentou para 5 apenas para estar no lado seguro. Parece estar funcionando bem agora. Não tenho certeza de quanto tempo leva sua chamada assíncrona, ou se você pode pagar um intervalo de tempo limite maior que 1, mas vale a pena disparar. Respondeu 24 de novembro às 20:14 Eu tentei isso, em 50 casos isso ajudou. Você pode ver no código que eu postei que o async é apenas dispatchafter que espera 0.5s. No final, estou nildo a expectativa após o bloqueio de espera e fazer tudo afirma também após o bloco de espera. Então, nada acontece enquanto espera, mas cumpre. Ndash Micha Hernas 25 de novembro às 11h18 Swift tem um problema especial para mostrar o ponto de ruptura de exceção correto quando os fechamentos estão presentes no mesmo escopo. Eu vi o mesmo problema em um XCTestCase que usou dispatchafter e mesmo através do ponto de interrupção de exceção foi a mesma linha que waitForExpectationsWithTimeout, o caso de teste estava falhando devido a um downcast em um objeto nulo. Eu sei que este não é o seu caso, mas sempre que isso acontece, sugiro remover declarações uma linha por vez e executar o teste após cada remoção. Se o teste não falhar, você identificou o culpado. Esta é, infelizmente, a melhor opção no momento desta escrita sempre que Swift mostra um ponto de interrupção de exceção em uma linha que não faz sentido, especialmente a infame linha 0 de uma classe que você pode ver em ferramentas de relatório de falhas. Deixe-nos saber se você descobriu seu acidente. Eu tive o mesmo problema. A correção para mim pareceu estar aumentando o intervalo de tempo limite. Eu originalmente tinha um intervalo de tempo limite de 1 e aumentou para 5 apenas para estar no lado seguro. Parece estar funcionando bem agora. Não tenho certeza de quanto tempo leva sua chamada assíncrona, ou se você pode pagar um intervalo de tempo limite maior que 1, mas vale a pena disparar. Respondeu 24 de novembro às 20:14 Eu tentei isso, em 50 casos isso ajudou. Você pode ver no código que eu postei que o async é apenas dispatchafter que espera 0.5s. No final, estou nildo a expectativa após o bloqueio de espera e fazer tudo afirma também após o bloco de espera. Então, nada acontece enquanto espera, mas cumpre. Ndash Micha Hernas 25 de novembro às 11h18 Swift tem um problema especial para mostrar o ponto de ruptura de exceção correto quando os fechamentos estão presentes no mesmo escopo. Eu vi o mesmo problema em um XCTestCase que usou dispatchafter e mesmo através do ponto de interrupção de exceção foi a mesma linha que waitForExpectationsWithTimeout, o caso de teste estava falhando devido a um downcast em um objeto nulo. Eu sei que este não é o seu caso, mas sempre que isso acontece, sugiro remover declarações uma linha por vez e executar o teste após cada remoção. Se o teste não falhar, você identificou o culpado. Esta é, infelizmente, a melhor opção no momento desta escrita sempre que Swift mostra um ponto de interrupção de exceção em uma linha que não faz sentido, especialmente a infame linha 0 de uma classe que você pode ver em ferramentas de relatório de falhas. Deixe-nos saber se você descobriu seu crash. Teste de unidade assíncrona no Xcode 6 No ano passado, descrevi um método para implementar testes de unidades assíncronas no Xcode 5. Let8217s lembramos o problema com o teste de unidade assíncrona. Muitas APIs na própria plataforma iOS são assíncronas. Eles usaram invocações de retorno de chamada para assinalar quando eles foram concluídos, e estes podem ser executados em filas diferentes. Eles podem fazer solicitações de rede ou escrever no sistema de arquivos local. Estas podem ser tarefas demoradas que precisam ser executadas em segundo plano. Isso cria um problema porque os próprios testes funcionam de forma síncrona. Então, nossos testes precisam esperar até serem notificados quando a tarefa em execução foi concluída. Eu propus um método que implicou a configuração de uma bandeira booleana no teste da unidade e o loop em um loop while () até que o sinalizador fosse configurado como falso, permitindo que o teste fosse concluído corretamente. Este método funcionou na maioria das vezes, mas nunca fui feliz com isso, considerando-o como um pouco de um kludge. Na publicação do blog, concluí: ainda tenho minhas reservas sobre esta técnica, e ainda estou procurando a solução perfeita para testes de unidades assíncronas no Xcode. Você pensaria que a Apple poderia ter fornecido uma solução no XCTest, talvez semelhante à implementação no GHUnit. Aqui, o que a versão Objective-C de um teste de unidade assíncrono de exemplo simples em Xcode 5 usando o método antigo parece: Posts recentes Posts Populares Categorias

No comments:

Post a Comment