Crash et sauvegarde de données sur Xcode

Bonjour,
Je suis en train de recréer un application sous iOS 11 qui servira d’aide au calcul des différents points du jeu Dungeon and Dragons (un role play). Je me suis essayé au multi fenêtres, à la sauvegarde des valeurs (pour l’instant juste le nom et la race du perso) et à deux ou trois autres choses (je n’ai pas réussi à domestiquer le pick view, ou menu défilant).
Mais à chaque fois que je lance mon application (testé sur iPhone 7+), j’ai une erreur fatale incompréhensible, par exemple lorsque je lance la page “fiche générale”. C’est pourquoi je compte sur vous pour m’aider à la résoudre. Le dossier de mon app est disponible ici : Free.

Bonne journée/soirée !
Et merci d’avance :blush:

NE CLIQUEZ PAS SUR LE LIEN !
IL MENE A UNE PAGE PIEGE TENTANT D’INSTALLER UN MALWARE
Le gag classique du faux message d’avertissement alarmiste (6 virus) avec proposition de téléchargement d’un « correctif"

Pourtant c’est moi qui l’ai créé avec Mediafire et il fonctionne très bien de mon côté…:no_mouth:

C’est Mediafire qui insère une page de publicité piégée. Tu devrais changer de service pour envoyer tes fichiers. Et retirer le lien de ton post !

J’ajoute que les pages de pub affichant un message « voulez-vous vraiment quitter cette page, oui ou non », quand on clique sur le bouton rouge d’effacement c’est honteux. Dans 90% des cas c’est une tentative de camoufler une demande d’installation d’une saleté. Il ne faut jamais répondre oui ou non et utiliser la fonction « Forcer à quitter » de MacOS pour quitter Safari de force par prudence. :face_vomiting:

Ok, merci pour l’info. J’ai transféré mon dossier vers Free et changé le lien. Au pire des cas, je me retrancherai vers Dropbox ou Google.

Edit : bizarrement, j’ai un peu modifié le code et l’erreur s’est déplacée. Le dossier en lien a été mis à jour

J’ai jeté un oeil sur ton projet. Il se produit une erreur chaque fois que tu tentes d’écrire quelque chose dans un contrôle graphique. Les outlets sont pourtant bien là. Par contre, il y a plusieurs écrans et un seul ViewController dans le projet. C’est curieux. C’est peut-être la source du problème. Tu devrais associer un ViewController spécifique (même s’il ne fait rien) à chaque écran.

Tu devrais revoir la vidéo de Maxime : « Créer un nouvel écran et son contrôleur associé », dans la section « Naviguer entre plusieurs écrans ».

J’ai préféré tout mettre sur un seul ViewController pour être sûr que les items puissent interragir ensemble. Par exemple je récupère le text “race” de la page histoire pour l’insérer dans ma description à la page “général”. Je ne sais pas pour l’instant faire autrement, mais si vous avez une idée, je suis preneur !

Je crois que tu n’as pas compris le principe de fonctionnement des applications multi-écrans. Quand iOS passe d’un ViewController à un autre, il détruit tous les objets graphiques du premier, y compris les contrôles graphiques (Labels, TextViews, etc…), pour économiser la mémoire. Toutes les information stockées dans ses contrôles sont PERDUES dans l’opération.

Le cycle de fonctionnement d’un ViewController c’est :

  • Initialisation des données et CONSTRUCTION de l’interface à partir du Storyboard
  • Attente des ordres de l’utilisateur
  • DESTRUCTION de l’interface quand iOS passe la main à un autre ViewController

Le ViewController de l’écran « Général » ne peut pas récupérer des informations d’un contrôle de l’écran « Histoire », puisque les deux écrans n’existent jamais en même temps dans la mémoire !

Pour transférer des informations entre deux ViewControllers, il faut les archiver quelque part, de sorte que le nouveau ViewController puisse les récupérer. Tu devrais vraiment regarder à nouveau les vidéos de Maxime sur les applications multi-écrans pour voir comment faire.

EDIT : iOS crée un nouveau ViewController pour chaque écran. Dans ton application tu as défini qu’il est toujours de type GeneralController, Cela ne veut pas dire qu’il n’y a qu’un SEUL GeneralController dans l’application. Chaque écran en possède sa propre copie, totalement indépendant des autres, et incapable de communiquer avec ses frères jumeaux, d’où le besoin de coder un mécanisme d’archivage des informations pour les transmettre entre écrans (voir vidéos de Maxime).


On peut effectivement créer une application avec un seul ViewController et plusieurs vues, mais pas avec les mécanismes présentés par Maxime. L’idée c’est d’avoir un seul ViewController avec sa vue principale et plusieurs vues secondaires de la même taille que l’écran, que l’on superpose par code. C’est une vieille méthode, pratique avec des petites applications (2 ou 3 écrans), mais se révèle problématique avec des applications sérieuses comprenant de nombreux écrans. Le problème c’est encore et toujours l’occupation mémoire, un point crucial pour les devices.

Merci beaucoup pour cette réponse claire et précise. Je vais adapter mon application en conséquence et continuer de regarder le cours de Maxime. Et je reviendrai avec joie si j’ai un autre gros problème, mais en pensant à bien regarder ce que propose ses vidéos avant :wink:
Bonne journée