[Résolu] Newbie install appli
Bonjour,
j'ai enfin mon compte chez apple.
Je peux tester mon appli sur mon ipad.
J'ai testé des applis tests - Nickel.
Je teste mon vrai projet, et là j'ai mon premier crash. Yeeeessss.
Je me retrouve (dans Xcode) sur une page avec plein de lignes incompréhensibles, avec ce message sur la première ligne.
libswiftCore.dylib`function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> ():
Et cette ligne active
0xef6164 <+64>: trap
Avec cela au-dessus
; function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded> of Swift.(_fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> ()).(closure #2)
Réponses
Je dirais qu'il faut que tu ajoutes un exception breakpoint. Normalement ça devrait te mettre la ligne où il y a un problème.
EDIT : un tuto pas mal
http://jeffreysambells.com/2014/01/14/using-breakpoints-in-xcode
Merci Romain pour ta réponse.
J'ai mis un exception breakpoint, mais ça ne m'envoi pas sur la ligne d'erreur dans mon code.
Je clique sur le petit bouton en bas du debugger (step into) avec ou sans "control" (step into instruction) et j'arrive dans n'importe quel fichier sans ligne active.
J'ai bien regardé ton lien. Super. Mais je n'arrive pas à traduire cela en swift.
Tout ce que je trouve sur le web est en objC.
Il me manque les trucs du NSException - J'y arrive pas
Pour les try catch etc, j'ai trouvé ça - Cool.
Mais il me manque l'histoire des exception pour pouvoir afficher d'où vient le problème.
Et avec TOUT le message d'erreur ? Y'a pas un truc que t'aurais zappe dedans ?
Ben non.
Je met ici seulement un bout de la liste, mais il n'y a que des lignes de ce type
J'ai d'autre part dans la console le fameux message
Et oui, on y est. Encore lui.
Le problème c'est que je ne sais pas à quelle ligne cela fait référence.
En attendant je piste avec des println (appli lancée sur le simulateur et sur l'ipad)
J'ai des trucs différents.
J'ai noté qu'il s'agirait d'une image qui n'est pas enregistrée dans l'ipad.
Curieux.
Voici mes sorties console :
Simulateur
Et sur l'iPad
Voici le code d'écriture de l'image dans la machine :
Ce code fonctionne bien sur le simulateur et pas sur l'iPad. Oups...
Merci d'avance pour l'astuce du siècle.
Bon, dans un premier temps, j'ai résolu mon problème de répertoire d'enregistrement de l'image et de sa récupération. Elle n'est donc plus nil. Mais par contre, j'ai un énoooooorme problème (voir plus bas).
Code qui fonctionne pour ceux que ça intéressent...
Nouveau code d'écriture :
Nouveau code de récupération :
Alors mon problème :
Je commence à maà®triser le debugger, et donc à bien lire les variables (par thread et tout et tout).
Et donc, j'ai un paquet de variable à nil, et donc j'ai plein de crash dans mes enchainement d'écran.
Ce que je ne comprend pas, c'est que sur certain écrans, un type de code fonctionne et pas sur d'autres.
Par exemple :
sur écran, cela est accepté :
alors que sur le suivant, je suis obligé de faire cela :
Bien que sur les deux écrans, je fasse plus loin, exactement le même code :
et c'est pareil pour à peu-près tous les objets :
ça ça passe sur un écran :
alors que sur un autre je suis obligé de faire cela :
et c'est pareil pour tous les uiviews et uibutton, etc.
Evidemment, tout cela sur ipad, alors que sur le simulateur, aucun problème. Le même code fonctionne sur tous les écrans.
Bon, si ce n'était que cela, il suffirait que je remonte mes manches, et allons-y, je remplace tout ce petit monde dans mes 70 fichiers, et c'est réglé. Genre 3 jours de taf inutile.
Mais le pire, c'est que tout le code qui en découle doit être également modifié, et là , ça craint vraiment trop.
Par ex :
qui passe sur les deux premiers écrans, doit être remplacé par :
sur les écrans suivants.
Et donc ce code
n'est plus valable sur les écrans suivant alors qu'il fonctionne sur les deux premiers
Erreur de Xcode (on peut pas comparer le truc avec nil)
Il doit être remplacé par cela
etc etc etc
Si quelqu'un a une idée, parce que c'est carrément étrange.
Merci d'avance - Là , je craque.
En fait, je remplace tous les :
par :
Optionnal....
Et puis donc, partout où se trouve, par ex :
je remplace par :
En résumé je remplace tous les "!" et "rien" par "?" et "!" - pfffff
Est-ce que j'ai bon ?
Merci
Je continue à me répondre à moi-même, ça peut servir aussi aux autres newbies.
En gros, je faisais une erreur d'interprétation de tous les nil visibles dans le debugger.
J'avais des tonnes de nil, et c'était normal, car il s'agissait des trucs qui n'étaient pas encore utilisés. Je suis débile.
Et lors d'un crash, évidemment, ils sont tous visibles dans le debugger.
Bref, ayant résolu mes problèmes d'images nil à cause de mauvais chemin de répertoire, à l'aide de l'optionnel binding, je n'ai plus de crash.
Je suis super content de voir mon appli sur l'ipad, qui fonctionne sans crasher. Mais ne crions pas trop tôt victoire.
J'ai encore pas mal de trucs à tester.
J'ai par contre un message d'erreur dans la console, sans crash. Mais je créerai un nouveau post après avoir fait quelques essais pour le résoudre.
Peut-être mon nouveau chemin de répertoire n'est-il pas bon...
Je met résolu.
Merci pour l'aide des barmen. Les remarques que vous avez laissées sur tous mes autres posts, m'ont bien aidé. Surtout les histoire de nil, optionnel, et autre bindings...
Tu viens de tuer une famille entière de poneys.
http://alisoftware.github.io/swift/2015/09/06/thinking-in-swift-1/
Buster, faut changer tes habitudes de travail. La prochaine fois, arrange-toi pour tuer une famille de moutons. C'est meilleur au goût.
Non pas les pauvres moutons, je pense qu'il y a pénurie en ce moment avec L'Aà¯d https://fr.wikipedia.org/wiki/Ibrahim#Le_sacrifice_demand.C3.A9_.C3.A0_Ibrahim
Merci AliGator d'insister sur les poneys. Tu m'avais déjà suggéré ce lien que j'avais lu.
Je l'ai relu en prenant d'avantage de temps. J'ai au moins enregistré une chose : Xcode is a newbie. Donc, ne pas m'y fier et réfléchir d'avantage.
En regard de mes deux dernières remarques (plus haut), je n'ai pas eu finalement à faire ce truc
Donc, ouf, ce poney est sauvé.
Mais par contre dans tous mes controllers, j'ai mes déclarations de variables ainsi.
Je tue des poneys ?
Sans quoi, j'aime beaucoup ton blog. Notamment ce lien que je vais creuser.
Et en chinant, je suis aussi tombé là -dessus. J'y ai trouvé des choses qui m'intéressaient.
Toutes ces lectures m'enthousiasment, mais je me sens de plus en plus découragé...
J'habite à la campagne, et je ne tue pas les araignées, je les met dans le jardin.
Aà¯d mabrouk
Bon d'accord, Buster pense à tuer une famille de chévres la prochaine fois.
Si ce n'est pas un IBOutlet, ça dépend de ton contexte, je ne pourrais pas juger le crime sans avoir enquêté dessus, chaque meurtre de poney est différent (à toi de plaider ton innocence et de m'expliquer pourquoi tu étais en légitime défense quand tu as tué ce poney et donc justifier pour quelle raison on devrait te pardonner pour ce crime, si c'est justifié tu auras peut-être la clémence du jury)
Ben c'est simple, sur mon écran (dans tous d'ailleurs), j'ai des boutons, des champs textes, des labels, des objets custom, etc.
Tout ce petit monde est en code (je sais, j'ai tort, mais c'est comme ça, je ne peux plus revenir en arrière, c'est dans des pageViews...
Ils sont donc déclarés au début de mon fichier, puis ensuite utilisés plus loin dans des fonctions qui traitent tout ça.
Par ex :
ou bien
ou bien encore
Je sais que le let result... devrait avoir une majuscule - je sais qu'il y a des magic numbers, je sais que c'est mal nommé - etc
Mais à part ça, tout va bien, non ?
Ou bien devrais-je mettre des ? sur toutes mes déclarations de variables (de bouton, labels, etc) ?
Voilà , j'attend le verdict. J'ai préparé mes oranges. Chui prêt. :-*
On déclare une variable optionnelle que si on estime que celle-ci peut être sans valeur durant son temps de vie. C'est un peu comme l'histoire des variables et des constantes. Donc non, mettre toutes les variables comme optionnelles est une mauvaise idée, il faut prendre au cas par cas et répondre à la question "Est-ce que cette variable peut être sans valeur durant son temps de vie ?".