Objective-c, wie man auf eine Instanzvariable von einer anderen Klasse zugreift

7

Ich bin es gewohnt, in Java zu programmieren und Klassenvariablen für den Zugriff auf Daten anderer Klassen zu verwenden. Dann habe ich herausgefunden, dass Klassenvariablen in Obj-C nicht gleich funktionieren und Probleme damit haben.

Mein Problem ist, dass ich auf das vom Benutzer eingegebene Passwort in einer anderen Klasse zugreifen will, nachdem der Benutzer eingeloggt ist. Habe in verschiedenen Foren gelesen und verwende Klassenmethoden (+) um auf diese Daten zuzugreifen. Da ich jedoch eine neue Instanz der ersten Klasse in Klasse 2 erstellen muss, bedeutet dies, dass das eingegebene Passwort in der neuen Instanz der Klasse 1 nicht existiert.

Mein Code ist wie folgt:

class1.h

%Vor%

class1.m

%Vor%

class2.m

%Vor%

Mein Problem ist also, dass die in class2 erstellte Instanz c1 das übergebene Passwort nicht enthält und daher "null" zurückgibt.

Vielleicht ist das nur mein Java-Ansatz, der es versaut hat, aber ich konnte keinen anderen Weg finden, also bitte helft mir:)!

    
Aleksander Akerø 30.03.2011, 15:05
quelle

4 Antworten

14

Eine öffentliche Klassenvariable in Java entspricht einer globalen Variablen in C und Objective-C. Sie würden es wie folgt implementieren:

class1.h

%Vor%

class1.m

%Vor%

Dann kann jeder, der class1.h importiert, in MyGlobalPassword lesen und schreiben.

Ein etwas besserer Ansatz wäre, es über eine "Klassenmethode" zugänglich zu machen.

class1.h:

%Vor%

class1.m:

%Vor%

Andere Klassen würden dann das Passwort über die password -Klassenmethode lesen.

Klasse2.m:

%Vor%     
Darren 30.03.2011, 15:41
quelle
5

Sie sollten überdenken, wie Ihre App-Struktur eingerichtet ist. Ihr Grundbedürfnis ist, dass Sie Ihr Passwort in einer Klasse speichern und darauf zugreifen müssen, oder? NSUserDefaults ist dafür perfekt (fast perfekt, siehe Hinweis # 3 unten). Ändere deinen class1 Code so, dass er so aussieht:

%Vor%

Entfernen Sie Ihre Passwort-Eigenschaft, Sie brauchen sie jetzt für nichts. Befreien Sie sich auch von Ihrer Methode +(NSString *)password; class .

Wenn Sie auf Login und Passwort zugreifen müssen:

%Vor%

Ein paar Notizen

  1. Ich habe dies aus dem Gedächtnis geschrieben, damit sie Fehler haben können, wenn Sie etwas herausfinden, lassen Sie es mich wissen und ich werde meine Antwort aktualisieren.
  2. Ihnen fehlen offenbar einige wichtige Punkte zur Verwendung von Klassenmethoden und -eigenschaften. Ich empfehle sehr, Apples Einführung in Objective-C zu lesen.
  3. Das Speichern von Login- und Passwortinformationen in NSUserDefaults ist NICHT sicher. Wenn jemand Root-Zugriff auf Ihr Gerät oder auf Ihre Gerätesicherungen erhält, kann er möglicherweise diese Anmeldeinformationen extrahieren. Wenn die Sicherheit für Sie von entscheidender Bedeutung ist, speichern Sie die Anmeldeinformationen in Schlüsselbund .
kubi 30.03.2011 15:40
quelle
2

Das in class1 erstellte class2 hat kein Passwort gesetzt, weil Sie gerade eine neue Instanz mit [[class1 alloc] init] instanziiert haben - das wird Mitgliedsvariablen nicht mit anderen Instanzen von class1 teilen, die an anderer Stelle erstellt wurden.

    
dcrosta 30.03.2011 15:08
quelle
1

Im Allgemeinen

Wenn Sie das Passwort auf einem Bildschirm akzeptieren und alles damit machen, haben Sie es immer noch. Wenn Sie zu einem anderen Bildschirm wechseln, warum halten Sie das Objekt von class1 nicht als Eigenschaft in class2 und legen Sie es fest, bevor Sie das Steuerelement an Klasse 2 übergeben.

Oder wenn Sie nur die Methode von class2 aufrufen, übergeben Sie class1 obj als Parameter mit passendem Passwort.

und wenn Sie es einfach als Parameter an die Methode übergeben, können Sie darauf zugreifen. Oder wenn Sie es als Eigenschaft dieser Klasse festlegen2. dann kannst du immer einen Getter benutzen.

Dieses Ding hat nichts mit Java oder Objective C zu tun.

    
Amogh Talpallikar 07.01.2012 03:58
quelle

Tags und Links