exc_bad_access sur one variable externe

Bonjour,



je suis tout ce qu'il y a de plus débutant en xcode et même en programmation en général. Je fais une petite application qui commence par une authentification classique avec login et mot de passe. Je voudrais pouvoir récupérer le login entré et le réutiliser dans d'autres vues, sachant que j'ai une classe par vue.



Pour cela j'ai créé dans le fichier .h de la première vue une variable externe : extern NSString *login;

Mais quand je veux la modifier dans le fichier .m (login=mail.text;), le programme plante et je reçois une exception de type exc_bad_acces.



Une idée ?



Merci beaucoup et désolé si c'est basique.

Réponses

  • CéroceCéroce Membre, Modérateur
    mars 2012 modifié #2
    Sans code, non, aucune idée.



    En fait, si, cette erreur indique que tu as essayé d'accéder à  une zone mémoire en dehors de celle du processus (ton appli). Donc, tu pourrais tu renseigner sur la gestion mémoire pour commencer.
  • Active NSZombie pour avoir plus de détails au lieu d'un simple bad access :

    http://stackoverflow.com/questions/2190227/how-do-i-setup-nszombieenabled-in-xcode-4



    Si ça continue à  faire un bad access, alors cela signifie que la variable n'a jamais été initialisée.



    Si l'on déclare une variable externe quelque part :
    extern NSString *const variableExterne;
    




    Il faut forcément lui attribuer une valeur à  un moment où un autre :
    NSString *const variableExterne = @"valeur";
    
  • Cela dit, je ne suis pas certain qu'une variable externe soit la solution dans ce cas. Il faudrait plutôt utiliser un singleton.
  • AliGatorAliGator Membre, Modérateur
    Non clairement pas. Les variables globales et extern sont clairement à  éviter, de manière générale cela présage souvent d'une mauvaise connaissance des patterns de base, et auquel cas il est conseillé de reréfléchir à  l'architecture de l'application et d'utiliser des patterns plus propres et classiques. Comme un Singleton, ou même à  se poser la question de savoir pourquoi on veut stocker le login (peut-être que seule une classe unique comme le VC principal en a besoin ? Peut-être que le passer de VC en VC pour le peu de VC qui en ont besoin est plus approprié ? Peut-être que le mémoriser dans les UserDefaults est plus utile ?)
Connectez-vous ou Inscrivez-vous pour répondre.