Bonjour,
Je reviens vers vous pour vous demandez encore un petit coup de main dans du debugging
Mon problème c’est que quand j’appuie sur une icône mon application crash avec cette erreur, mais ce crash ne se produit pas tout le temps, enfin quand il apparait une fois, il reste jusqu’a que je clean le projet mais il arrive que quand je le met sur d’autre iPhone ils n’ont pas ce bug…
Je sais que ce signalement signifie qu’il y a eu un changement de nom ou suppression sans enlevé dans le .storyboard et que normalement le debuggeur me dis explicitement d’ou viens le problème mais la il laisse juste un « espace »
Je vous met un petit screen si jamais vous avez déjà vue passer cette « petite » erreur
il faut que tu regardes à l’endroit de ton code où tu assignes des valeurs dans ton uiImageView… le pb ne doit pas être loin. Genre dans le cellForRow de ton controleur
Salut @nessimhalfon,
Peux-tu nous mettre le code où tu sets les données de tes RoomParticipationCell ?
Et du côté de ton storyboard, il n’y a pas d’erreur de lien avec ton fichier RoomParticipationCell ?
(Ça m’ait déjà arriver de laisser des liens par erreur alors que l’attribut concerné n’existait plus)
Salut @iMrMaximus,
J’ai tout regarder du coté du storyboard tout a l’air normal
Le truc qui me rend fou en faite c’est que ce problème n’apparait pas chez tout le monde, et que d’une compilation a l’autre il peux disparaitre
Tu commences par définir une classe RoomParticipantCell avec deux outlets non optionnels (symbole !), ce qui indique à Xcode qu’ils EXISTENT FORCEMENT.
Ensuite, tu demandes la création d’une cellule réutilisable de ce type, en précisant la valeur de l’outlet btn, sans définir de contenu à l’outlet img. Cela se passe généralement mal quand tu utilises une variable non optionnelle sans lui donner de contenu, genre gros crash.
Pire encore, non seulement le contenu de ton outlet n’est pas défini, mais en plus tu demandes à l’application de le détruire ! (cell.img.removeFromSuperView).
Sinon, il faut penser à définir des constantes pour les “chiffres magiques” de ton application. On retrouve le nombre 55/2 a 3 endroits dans le code. Tu devrais utiliser une constante pour ne définir cette valeur qu’une seule fois dans l’application.
let constantePresentation : CGFloat = 55.0/2.0
La système de complétude automatique permet d’utiliser des noms longs sans se soucier de les taper en entier. N’hésite pas à créer des noms de variables explicites, comme bouton à la place de btn ou imageQuelqueChose au lieu de img.
Effectivement @Draken a mis le doigt sur un point très important sur le cell.img.removeFromSuperView, bon je ne sais pas quel est le but de supprimer la vue mais tu pourrais eventuelement remplacer par cell.img.isHidden = true (cacher la vue) car je pense en effet que le fait de sup la vue ne doit pas être étranger à ton plantage, à creuser…
Merci pour vos réponse @Draken et @Samir,
En faite je suis juste stagiaire (fin de licence informatique) et j’ai repris les projets iOS et leur développeur iOS n’est plus la donc je me retrouve un peu seul dans une montagne de code qui apparemment n’est pas bon du tout donc c’est pas facile
En faite le “cell.img.removeFromSuperView” c’est pour cacher l’image (c’est une image de croix (définie en dure dans le .storyboard), en haut a droite du bouton pour supprimer mais qui n’est pas encore implémenté) je vais faire comme vous m’avez dis et mettre .isHidden = true
Le problème des cellules réutilisables, c’est que iOS ne les reinitialise pas dans l’état initial au moment de la réutilisation. Cela permet de gagner du temps et d’économiser des ressources CPU en évitant de nouvelles allocations mémoires. Si la cellule peut être altérée lors de son utilisation, il faut en tenir compte dans le code pour sa “prochaine vie”.
Si tu caches un élément graphique de la cellule, avec .isHidden = true, il sera toujours caché à la prochaine réutilisation. N’oublie donc pas de prévoir un .isHidden = false dans le code de réutilisation, si la cellule a besoin que l’élément soit visible.
@Draken Dacc donc si je veux faire autrement faut que je fasse comment ?
D’accord quand je devrais implémenté cette fonctionnalité je penserai bien a mettre .isHidden = false