[Résolu] Transmission de variables au sein des pages d'un UIPagViewController

2»

Réponses

  • Je suis en Version 6.1.1 (6A2008a)


     


    Mais je ne veux pas prendre la dernière tout de suite, j'attend que mon projet avance d'avantage.


     


    Je sais qu'il y a pas mal de truc qui changent au sujet des "?" et "!" mais c'est pas grave. Je m'adapte.


  • Une raison particulière pour pas passer en 6.3 ? Swift a beaucoup évolué, je vois pas trop le truc d'apprendre une version dépassée ?


  • La 6.1.1 commence à  dater. C'est du Swift 1.1. On est déjà  à  la troisième mise à  jour de la 6.3 et du Swift 1.2. Et il me semble qu'Apple n'accepte de valider que les applications compilés avec un Xcode récent.


     


    Je ne peux pas taper de code pour le moment, la mise à  jour étant en train de s'exécuter. 

  • Oui, panique et peur de crasher le mac avec les installe apple, mais il faudra y passer.


     


    Le truc c'est que pour l'instant j'aimerai avancer sur mon projet, et je panique un peu, à  cause des délais et pb de tunes.


    Bref; que de la connerie tout ça, mais bon, c'est comme ça, je m'accroche.


     


    J'ai tout remonté la structure de mon projet, et j'essaie de mettre en place un vrai et pur mvc, et ça bloque grave.


    Chui un peu dépité, ce matin, mais je continue à  chercher la faille.


  • En fait tu prends le problème à  l'envers (je pense), tu perds du temps en ayant peur d'en perdre :)


     


    Jamais eu de soucis de maj xCode.


  • Je viens de regarder le topo de la mise à  jour, y'a pas grand chose qui soit une révolution pour mon cas, à  part peut-être les crashs intempestif de ce code de m...


  • tu penses que la mise à  jour me fera gagner du temps sur quoi ?


  • DrakenDraken Membre
    mai 2015 modifié #39

    En interne, Apple est déja à  XCode 6.4 beta. Tu risques de perdre pas mal de temps, pour convertir ton projet à  sa sortie, s'il est refusé pour cause d'XCode trop ancien.


    Ceci dit, il est possible d'avoir plusieurs Xcode sur la même machine. A une époque j'avais les version 6.1.1, 6.2 et 6.3 beta en même temps ! Et ça marchait très bien ..


     


    Xcode 6.1.1 parce qu'il était demandé pour le MOOC sur la programmation Swift que je suivais (voir les vidéos dans ma signature)


    Xcode 6.2 parce que c'étais la dernière version officielle


    Xcode 6.3 beta pour jeter un oeil sur le dév Apple Watch et tuer des chats


     


    La seconde partie du MOOC était basé sur Xcode 6.2, j'ai effacé la 6.1.1 et je tourne maintenant avec deux versions, 6.2 pour les exercices et 6.3 pour être à  jour.

  • merci pour ces précieuses infos.


     


    Comment tu fais pour avoir plusieurs versions ?


    L'installe n'écrase pas automatiquement l'ancienne ?


     


    Sinon, de toutes les façons, je comptais faire la mise à  jour et adapter mon projet avant de l'envoyer chez apple.



     


     


    Tu risques de perdre pas mal de temps, pour convertir ton projet à  sa sortie

    Pourquoi, c'est si long que ça ?


  • Il faut télécharger le dmg depuis le site développer Apple et lancer l'installation à  la main. Il te signale alors qu'il y a déjà  une autre application du même nom et te propose d'effacer l'ancienne version ou de renommer la nouvelle.


     


    Il n'est pas forcément long de convertir un projet, mais mon expérience m'a apprise que les problèmes bêtes, stupides et chronophage adorent arriver en meute au pire moment, quand le stress est à  son maximum .. 

  • AliGatorAliGator Membre, Modérateur

    tu penses que la mise à  jour me fera gagner du temps sur quoi ?


    Points qui te feront gagner du temps :
    • Moins de crash de Xcode
    • Des erreurs de compilation bien plus claires et explicites qu'avec les premières versions de Xcode 6.1 et Swift 1.0/1.1 (où les erreurs Swift sont parfois incompréhensibles et ne collent pas avec le vrai problème)
    • Un langage Swift plus cohérent avec les nouveautés du langage Swift 1.2
    Points qui te feront perdre du temps :
    • Attendre avant de migrer de Xcode 6.1 à  6.3, car plus tu vas attendre plus la transition risque d'être coûteuse (surtout si tu attends le dernier moment quand tu vas t'apprêter à  publier sur le Store et qu'il faudra obligatoirement publier avec la dernière version de Xcode)
    • Et rien d'autre, car avec l'assistant de migration automatique intégré à  Xcode (menu "Edit" > "Convert" > "To Latest Swift Syntax..."), il convertit tout pour toi
    Bref je ne vois que des avantages à  migrer vers 6.3 et que des inconvénients à  rester à  6.1.
  • Bon vous m'avez convaincu.


     


    Mais j'aimerai bien résoudre mon problème de mvc.


     


    Je fais un truc tout simple (voir plus haut l'objet créé selon le tuto de Draken), et impossible de communiquer avec l'objet. Le println("Coucou - toto"), est juste pour chercher à  communiquer, car au départ, j'ai évidemment d'autre besoins. Le plan, c'est d'avoir mes variables en externes (donc dans un objet), puis de se les passer entre controllers (comme Draken me l'a expliqué).


     


    J'essaie des trucs du genre



    listeDesVariables.nomString = nomEdit

    puis



    println("listeDesVariables - nomString = \(listeDesVariables?.nomString)")

    Et c'est nil


     


    Evidemment mon nomEdit n'est pas nil.


     


    Cela fait plusieurs jours que je piste tout ça dans mon projet, et impossible de communiquer avec ma classe (enfin l'objet - instance de la classe).


     


    Je pense que c'est une histoire de déclaration (ou d'init), mais j'ai tout essayé, j'ai revu les tutos et cours sur les classes. Là , c'est vraiment du béAba, et ça marche pas du tout, et donc je ne peux plus avancer.


     


    Car le mvc expliqué par Draken semble la solution incontournable à  mes histoires de tonnes de variables qui communiquent entre controllers


  • Purée, ça rend fou ce truc.


     


    J'ai tout virer mes variables, et je peux créer mon objet ainsi



    var listeDesVariables = ListeDesVariables()

    puis appeler une fonction de l'objet ainsi



    listeDesVariables.toto()

    et j'ai bien mon println


     


    Et si je fais simple (comme Draken), dès que je met une variable dedans, ça déconne grave.


     


    L'erreur classique



     


    'ListeDesVariables' cannot be constructed because it has no accessible initializers



     


    Et si je met un init dans ma classe, Xcode me dit que je dois déclarer mon objet avec les variables - pfff

  • En fait, ça marche avec des variables comme ça



    var nomString = ""

    mais pas avec ça



    var existingItem: NSManagedObject!

    évidemment, c'est normal.


     


    Désolé pour ces messages de plaintif  :p


  • C'est le métier qui rentre .. Donc, plus de problème avec le MVC ?

  • busterTheobusterTheo Membre
    mai 2015 modifié #47

    Tu m'étonnes.


     


    Ben là , ça progresse grave - Génial - Encore merci pour ton tuto.


    Je vais galérer tout-à -l'heure, lorsque je serais sur mes enregistrements voire mes update, avec mon histoire de 



     


     


    NSManagedObject

    mais je pense que je vais trouver.


     


    J'ai aussi réussi à  résoudre un putain de problème qui me tenait depuis plusieurs jours.


    Après un 



    pagesNavigationController?.popToRootViewControllerAnimated(true)

    Le controller de la vue de base ne se rechargeait pas (un petit println dans le viewdidload...), et j'ai fait ça :


    J'ai peur que ça soit un peu barbare, mais ça marche nickel.



    etape0ViewController = UIStoryboard.etape0ViewController()
    pagesNavigationController = UINavigationController(rootViewController: etape0ViewController)
    view.addSubview(pagesNavigationController.view)
    introAppli = false
    configureNavbar(etape0ViewController)
    pagesNavigationController?.popToRootViewControllerAnimated(true)

    Barbare, car je ne supprime pas la pagesNavigationController.view avant le addSubView !!!


     


    En gros, je reprend le code du départ du lancement de l'appli - Bof


  • Attention : - (void)viewdidload n'est appelé qu'une seule fois, lors du premier chargement de la vue.


     


    Il faut plutôt que tu logues dans -viewDidAppear.


  • busterTheobusterTheo Membre
    mai 2015 modifié #49

    Ah merci.


     


    Mais en fait, le code :



    etape0ViewController = UIStoryboard.etape0ViewController()
    pagesNavigationController = UINavigationController(rootViewController: etape0ViewController)
    view.addSubview(pagesNavigationController.view)
    introAppli = false
    configureNavbar(etape0ViewController)
    pagesNavigationController?.popToRootViewControllerAnimated(true)

    je l'ai viré, car je perd la jolie transition que j'avais (un toggle de nav de gauche),


    et donc je n'ai plus mon controller etape0Controller qui se recharge, et donc je ne peux pas récupérer mes variables.


     


    En gros, on fait comment pour recharger une page autrement qu'avec ce code ?


     


    Si je fais un



    pagesNavigationController?.popToRootViewControllerAnimated(true)


    ainsi que mon toggle de la nav, c'est propre, mais mon controller ne se recharge pas.


     


    Car en fait, je suis déjà  sur cette page (champs vides) et lorsque je click dans ma tableView (dans ma nav de gauche), les champs doivent se remplir (dans la vue de droite), mais pour ce faire, je dois recharger le controller associé


  • Je n'ai pas suivi le fil de discussion, mais je peux te donner cette réponse :


     


    Si tu veux que ton VC se recharge, il suffit de créer une méthode "-(void)reload" pour ce VC et de l'appeler, avant de faire popToRootViewControllerAnimated.


  • Ah merci, mais en fait j'essaie avec une function appelée en delegate, mais je galère un peu. J'insiste, je vais y arriver, chui pas loin. Merci pour tes réponses. Ma structure est un peu complexe à  expliquée...


  • Tu devrais regarder ces vidéos (en français) : http://pagesperso-systeme.lip6.fr/Fabrice.Kordon/5I452-2014/semaine-08.php

  • C'est sympa, mais je les aies déjà  toutes regardées, et le mec est un peu brouillon quand même, mais il a le mérite de les avoir faites. Je vais quand même me refaire celle-ci. Merci d'insister.


     


    Mais bon, rien de tel que la pratique, la sueur, et les barmen.


     


    Tiens, je t'ai mis une vidéo en ligne.


     


    C'est bidon, mais la structure s'étoffe. Y'a du mvc.


     


    Le gotoEtape1, est provisoire : c'est juste pour passer à  l'étape suivante, qui elle est en pageview.


     


    L'astuce, entre autres, était de mettre la création de l'objet en dehors de la déclaration de la classe du container général.



    .........
    var listeDesVariables = ListeDesVariables()

    class ContainerViewController: UIViewController, PatientsViewControllerDelegate, Etape0ViewControllerDelegate, Etape1ViewControllerDelegate {
    .........
  • Le lien vers ta vidéo ne semble pas fonctionner ..

  • Je viens de vérifier, il fonctionne - Tiens moi au jus.


     


    En même temps, c'est bidon, j'en remettrais une quand je serais plus avancé.


     


    Aujourd'hui, je peux enfin passer à  la phase 2 de mon appli. Plein de géométrie, de cercles, de poignées, de bezier, de masques, du FUN, quoi. Je vais souffrir, mais en m'amusant - Ouf.


     


    Un grand merci à  vous tous. Sans vous, je ne m'en serais jamais sorti, ou j'aurais mis 10 fois plus de temps (et j'ai des doutes là -dessus).


     


    Je suis beaucoup moins stressé ce soir - Le bar, c'est bien mieux que le psy -  :p   :D   :p   :o  


     


     


    Thaaaaaaaannnnnnnnnnnnnnnnks aLoT aux barmen.


  • DrakenDraken Membre
    mai 2015 modifié #56

    ça fonctionne maintenant. Ma connexion Orange est capricieuse, se bloquant de temps en temps l'espace de quelques secondes. 


  • AliGatorAliGator Membre, Modérateur
    [Mode Modérateur]
    J'ai déplacé les messages relatifs à  l'installation d'un nouveau Xcode et sa documentation dans ce sujet dédié pour ne pas trop partir en vrille et dériver du sujet d'origine.
  • bravo et encore merci


Connectez-vous ou Inscrivez-vous pour répondre.