7
votes

Objective-C, comment accéder à une variable d'instance d'une autre classe

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.

Mon code est comme suit:

classe1.h xxx

classe1.m xxx

class2.m xxx

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".

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 :)!


0 commentaires

4 Réponses :


2
votes

Le class1 créé dans class2 n'aura pas de mot de passe, car vous venez d'instanciationner une nouvelle instance avec [[[[CLASS1 ALLOC] init] - Cela ne partagera pas les variables de membre avec d'autres instances de CLASS1 Créé ailleurs.


1 commentaires

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



5
votes

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
}


1 commentaires

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.



14
votes

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 xxx

class1.m xxx

puis, quiconque qui importe classe1.h peut lire et écrire sur myglobalpassword .

Une approche légèrement meilleure serait accessible via une "méthode de classe".

classe1.h : xxx

classe1.m: xxx

d'autres classes permettraient ensuite le mot de passe via le mot de passe Méthode de classe.

classe2.m: xxx


2 commentaires

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!



1
votes

Généralement,

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.

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.

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.

Cette chose n'a rien eu à faire avec java ou objectif c.


0 commentaires