Je suis utilisé pour programmer en Java et utiliser des variables de classe pour accéder aux données d'autres classes. Ensuite, j'ai découvert que les variables de classe ne fonctionnent pas de la même manière à Obj-C et ont des problèmes de problème.
Mon problème est que je souhaite accéder au mot de passe saisi de l'utilisateur dans une autre classe une fois que l'utilisateur est connecté. J'ai lu dans différents forums et de telle sorte que je devais utiliser des méthodes de classe (+) pour accéder à ces données. Mais parce que j'ai besoin de créer une nouvelle instance de la première classe en classe deux, cela signifie que le mot de passe entré n'existe pas dans la nouvelle instance de la classe une. P>
Mon code est comme suit: P>
classe1.h p> classe1.m p> class2.m p> Donc, mon problème est que l'instance C1 créée en classe2 ne contient pas le mot de passe soumis et renvoie donc "null". P> Peut-être que c'est juste mon approche Java en train de gâcher, mais Je n'ai pas trouvé d'autre manière, alors s'il vous plaît aider :)! P> p>
4 Réponses :
Le class1 code> créé dans class2 code> n'aura pas de mot de passe, car vous venez d'instanciationner une nouvelle instance avec [[[[CLASS1 ALLOC] init] Code> - Cela ne partagera pas les variables de membre avec d'autres instances de CLASS1 CODE> Créé ailleurs. P>
Ouais en fait j'ai expliqué que dans ma question, mais merci de clarifier :) Peut-être que c'était juste une explication négligée: P
Vous devez repenser la configuration de votre structure de l'application. Votre besoin de base est que vous devez enregistrer votre mot de passe dans une classe et l'accéder à un autre, non? Nsuserdefault Code> est parfait (presque parfait, voir la note n ° 3 ci-dessous) pour cela. Changez votre code class1 code> pour ressembler à ceci: -(void) someMethodUsingPassword {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefauls];
NSString *username = [defaults stringForKey:@"usernameKey"];
NSString *password = [defaults stringForKey:@"passwordKey"];
// do whatever here
}
J'ai reçu la compréhension de l'autre blog post et obj-C de la littérature que l'on ne devrait pas stocker un mot de passe à l'aide de Nsuserdefault, car il n'est pas sécurisé et il faudrait la chiffrer. De plus, je n'ai pas besoin de sauver le mot de passe, j'ai simplement besoin de le transmettre d'une classe à l'autre.
Une variable de classe publique en Java équivaut à une variable globale en C et à l'objectif-c. Vous l'implémenteriez comme suit:
class1.h p> class1.m p> puis, quiconque qui importe classe1.h peut lire et écrire sur Une approche légèrement meilleure serait accessible via une "méthode de classe". p> classe1.h : p> classe1.m: p> d'autres classes permettraient ensuite le mot de passe via le mot de passe classe2.m: p> myglobalpassword code>. p> Code> Méthode de classe. P>
TNX pour une réponse probablement bonne, mais je n'ai pas essayé cela parce que j'ai résolu le problème moi-même. Quelque chose qui a été laissé de côté des exemples de mon code était que, dans la classe1, j'instaine l'objet CLASS2 qui a besoin du mot de passe. Donc, je pourrais simplement définir la variable de mot de passe en classe2 en lui accédant à partir de l'instance créée en classe1. Je vais éditer mon code pour que d'autres puissent voir comment je l'ai résolu.
+1 pour la «approche légèrement meilleure» avec les méthodes de classe. Agréable!
Généralement, P>
Lorsque vous acceptez le mot de passe dans un écran et faites quoi que ce soit avec elle, vous l'avez toujours. Lorsque vous vous déplacez dans une autre écran, pourquoi ne vous conserverez pas, l'objet de Class1 en tant que propriété en classe2 et la définir avant de passer le contrôle sur la classe 2. P>
ou si vous appelez simplement la méthode de CLASS2 UST PASS CLASS1 OBJ en tant que paramètre avec mot de passe déjà dedans. P>
Et au cas où vous, vous venez de le transmettre à la méthode sous forme de paramètre, vous pouvez y accéder. Ou si vous la définissez comme une propriété de cette classe2. alors vous pouvez toujours utiliser un getter. p>
Cette chose n'a rien eu à faire avec java ou objectif c. p>