Sunday, 12 March 2017

Waitforexpectationswithtimeout Objective C

Introduction Objective C est le langage de programmation natif pour Apples iOS et OS X. C'est un langage compilé, à usage général, capable de construire tout, depuis les utilitaires de ligne de commande jusqu'à des GUI animées vers des bibliothèques spécifiques au domaine. Il fournit également de nombreux outils pour le maintien de grandes structures évolutives. Comme C, Objective C a été conçu pour ajouter des fonctionnalités orientées objet à C, mais les deux langues l'ont accompli en utilisant des philosophies fondamentalement distinctes. Objective C est décidément plus dynamique, en reportant la plupart de ses décisions au temps d'exécution plutôt qu'à la compilation. Ceci est reflété dans beaucoup de modèles de conception sous jacents iOS et OS X développement. Objective C est également connu pour ses conventions de nommage verbose. Le code résultant est tellement descriptif qu'il est quasiment impossible de le mal comprendre ou de l'abuser. Par exemple, l'extrait suivant montre un appel de méthode C avec son équivalent Objective C. Comme vous pouvez le voir, les méthodes Objective C ressemblent davantage à un langage humain qu'à un ordinateur. Une fois que vous vous habituez à cela, il devient très facile de vous orienter dans de nouveaux projets et de travailler avec le code de tiers. Si vous êtes un peu désarmé par les crochets carrés, ne vous inquiétez pas. Vous serez assez à l'aise avec eux à la fin du tutoriel. Frameworks Comme pour la plupart des langages de programmation, Objective C est une syntaxe relativement simple soutenue par une bibliothèque standard étendue. Ce tutoriel se concentre principalement sur le langage lui même, mais il aide à avoir au moins une idée des outils avec lesquels vous interagirez dans le monde réel. Il existe quelques bibliothèques standard différentes, mais Apples Cocoa et Cocoa Touch cadres sont de loin les plus populaires. Ils définissent l'API pour la création d'applications OS X et iOS, respectivement. Le tableau ci dessous met en lumière certains des principaux cadres de Cocoa et Cocoa Touch. Pour une discussion plus détaillée, veuillez visiter la vue d'ensemble de la technologie Mac ou la vue d'ensemble de la technologie iOS. J'ai eu le même problème. Le correctif pour moi semblait être l'augmentation de l'intervalle de temporisation. J'avais à l'origine un intervalle de temps de 1 et l'ai augmenté à 5 juste pour être du côté sûr. Semble fonctionner maintenant. Je ne sais pas combien de temps votre appel async prend, ou si vous pouvez vous permettre un intervalle de temps plus long que 1, mais il vaut un coup. A répondu 24 novembre à 20:14 J'ai essayé cela, dans 50 cas, il a aidé. Vous pouvez voir dans le code que j'ai posté que async est juste dispatchafter qui attend 0.5s. À la fin je suis niling le bloc d'attente après attente et faisant tout affirme aussi après le bloc d'attente. Donc, rien ne se passe en attendant, mais accomplir. Ndash Micha Hernas Nov 25 14 at 11:18 Swift a le problème spécial de montrer le point de rupture d'exception correct lorsque des fermetures sont présentes dans la même portée. Ive vu le même problème dans un XCTestCase qui a utilisé dispatchafter et même à travers le point d'arrêt d'exception était la même ligne que waitForExpectationsWithTimeout le cas de test se brisait à cause d'un downcast sur un objet nil. Je sais que ce n'est pas votre cas, mais chaque fois que cela se produit je suggère de supprimer les déclarations d'une ligne à la fois et l'exécution du test après chaque retrait. Si le test ne se bloque pas, vous avez identifié le coupable. C'est malheureusement la meilleure option au moment de cette écriture lorsque Swift montre un point d'arrêt d'exception sur une ligne qui n'a pas de sens, en particulier la ligne infâme 0 d'une classe que vous pourriez voir dans les outils de rapports d'incident. Faites nous savoir si vous avez compris votre accident. J'ai eu le même problème. Le correctif pour moi semblait être l'augmentation de l'intervalle de temporisation. J'avais à l'origine un intervalle de temps de 1 et l'ai augmenté à 5 juste pour être du côté sûr. Semble fonctionner maintenant. Je ne sais pas combien de temps votre appel async prend, ou si vous pouvez vous permettre un intervalle de temps plus long que 1, mais il vaut un coup. A répondu 24 novembre à 20:14 J'ai essayé cela, dans 50 cas, il a aidé. Vous pouvez voir dans le code que j'ai posté que async est juste dispatchafter qui attend 0.5s. À la fin je suis niling le bloc d'attente après attente et faisant tout affirme aussi après le bloc d'attente. Donc, rien ne se passe en attendant, mais accomplir. Ndash Micha Hernas Nov 25 14 at 11:18 Swift a le problème spécial de montrer le point de rupture d'exception correct lorsque des fermetures sont présentes dans la même portée. Ive vu le même problème dans un XCTestCase qui a utilisé dispatchafter et même à travers le point d'arrêt d'exception était la même ligne que waitForExpectationsWithTimeout le cas de test se brisait à cause d'un downcast sur un objet nil. Je sais que ce n'est pas votre cas, mais chaque fois que cela se produit je suggère de supprimer les déclarations d'une ligne à la fois et l'exécution du test après chaque retrait. Si le test ne se bloque pas, vous avez identifié le coupable. C'est malheureusement la meilleure option au moment de cette écriture lorsque Swift montre un point d'arrêt d'exception sur une ligne qui n'a pas de sens, en particulier la ligne infâme 0 d'une classe que vous pourriez voir dans les outils de rapports d'incident. Faites nous savoir si vous avez compris votre crash. Asynchronous Unit Testing in Xcode 6 L'année dernière, j'ai décrit une méthode pour implémenter des tests unitaires asynchrones dans Xcode 5. Let8217s nous rappeler le problème avec les tests unitaires asynchrones. De nombreuses API sur la plate forme iOS elles mêmes sont asynchrones. Ils utilisent des appels de rappel pour signaler qu'ils sont terminés, et ceux ci peuvent s'exécuter dans des files d'attente différentes. Ils peuvent faire des demandes de réseau ou écrire dans le système de fichiers local. Ces tâches peuvent prendre beaucoup de temps et doivent être exécutées en arrière plan. Cela crée un problème car les tests eux mêmes s'exécutent de manière synchrone. Donc, nos tests doivent attendre jusqu'à ce qu'ils soient informés de la fin de la tâche en cours d'exécution. J'ai proposé une méthode qui impliquait de définir un drapeau booléen dans le test unitaire et de boucler en une boucle while () jusqu'à ce que le drapeau soit mis à faux, permettant au test de se terminer correctement. Cette méthode a fonctionné la plupart du temps mais je n'ai jamais été heureux avec lui, le considérant comme un peu d'un kludge. Dans ce blog j'ai conclu: J'ai encore mes réserves à propos de cette technique, et Im toujours à la recherche de la solution parfaite pour les tests d'unité asynchrone dans Xcode. Vous pourriez penser que Apple pourrait avoir fourni une solution dans XCTest, peut être similaire à la mise en œuvre dans GHUnit. Here8217s ce que la version Objective C d'un test d'unité asynchrone exemple bare bones dans Xcode 5 en utilisant l'ancienne méthode ressemble à: Posts récents Posts populaires Catégories


No comments:

Post a Comment