Chapitre 11 du cours iOS14

Bonjour à tous,
J’ai toujours un peu de mal avec l’architecture d’une application swiftUI et je viens de me refaire le cours sur iOS14 chapitre 11 créer une app avancée. Je l’avais regardé plusieurs fois lors de sa sortie il y a un ou deux mois, et j’ai été plusieurs troublé notamment sur les dernières vidéos où je voyais des lignes qui ne me disaient rien, et d’autres au contraire dont je me souvenais qui avaient disparu.
Mais là je suis sûr, après vérification, il y avait, lors de la publication, des init() particulières pour gérer les Binding, et ça a disparu. Et maintenant il y a des .onAppear qui n’y étaient pas.
Est ce que quelqu’un d’autre a constaté cette modification?
Je ne suis pas toujours très présent sur le forum, donc j’ai pu louper une annonce, mais en tout cas je n’ai rien vu passer.
Merci
Bonne soirée.

J’ai pensé à aller voir sur GitHub, et il y a bien eu des motifs il y 16j. Et en plus ça concerne justement un pb que j’ai sur mon appli depuis plusieurs semaines et que je ne comprenais pas.
J’avais posé la question lors du dernier coaching de groupe, mais on n’avait pas été très loin car je n’avais plus le code correspondant puisque j’avais déjà commencé à modifier ma façon de faire.

Effectivement j’ai fait des modifications à ce niveau et j’ai réenregistré la vidéo. Ces modifications sont liées à des détails techniques et ne changent en rien le principe du chapitre : utiliser un ViewModel avec chaque vue pour séparer l’affichage et les calculs.

Si tu veux plus d’infos sur les modifications apportées :
Dans la première version du cours j’utilisais un ObservableObject pour mon ViewModel mais les ObservableObject ne garantissent pas la conservation des objets en mémoire qui doivent être stockés ailleurs. Il était donc possible que mon view model soit supprimé puis récréé par le système. Un view model étant rattaché à une vue, il ne me paraît pas adapté de le stocker ailleurs.
J’ai donc modifié pour utiliser un StateObject dont j’avais parlé dans le cours. Ces StateObject ne peuvent pas recevoir de paramètres lors de leur construction donc ça oblige à utiliser le onAppear() comme je l’ai expliqué dans la vidéo.
J’espère que la prochaine version de SwiftUI améliorera ces StateObject et nous donnera une meilleure façon de gérer des view model car pour le moment je n’aime pas beaucoup cette solution.

Ça m’intéresse beaucoup car j’ai effectivement un pb qui donne l’impression que le viewModel est réinitialisé.

En vue du prochain coaching de groupe j’avais préparé un Extract de mon appli que j’ai considérablement allégé pour ne pas être noyé. Je me tâtais aussi pour en parler sur le forum. Si ça vous intéresse c’est dispo ici: GitHub

En gros j’ai une vue qui permet d’éditer un item, cet item étant composé de son nom et de l’id d’un container auquel il appartient.

Quand on démarre l’application, on arrive sur la liste des items qui est vide, on a un bouton pour voir la liste des containers qui est vide également pour le moment, et un autre bouton pour ajouter un item.

Quand on clique sur ce dernier, on arrive sur ma vue qui permet d’éditer l’item.

On tape un nom, et on clique sur « click to choose a container » ; la liste est vide mais on peut saisir le nom d’un nouveau container.

Et c’est là qu’est le pb : après avoir saisi le nom, quand on fait « entrée », la vue est réinitialisée, et les champs sont vides ; pourtant le container est bien créé ; si on refait la même chose, mais en cliquant sur le container, ça marche.

Si on édite DemoTestManager et qu’on supprime le « @Published » devant la déclaration du tableau container, on n’a plus le pb, mais je subodore qu’un autre pb pourrait apparaitre plus tard.

Voilà. Maintenant je vais modifier cette appli de test, pour vérifier que c’est bien lié à ce que Maxime a corrigé.

Merci et bonne journée.

1 J'aime

Il est tout à fait possible que ce soit lié en effet. Tiens nous au courant

Bonjour à tous,
Donc je reviens pour vous tenir au courant de mes tests, et effectivement, en faisant les corrections indiquées par Maxime, je n’ai plus le pb.
Mais je confirme également ce que Maxime a dit sur cette solution, c’est vrai que c’est un peu dommage de devoir passer par un optionnel pour le manager car ça complique les choses.

Sinon, en cherchant des infos sur ce pb, je suis tombé sur cette figure qui donne des indications intéressantes (j’ai essayer de copier la figure dans le post, mais ça met le lien à la place ; y a-t-il un moyen de mettre une image dans le texte?).

Le tweet dont il est issu est ici.

Merci et bonne soirée

Pascal

1 J'aime