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:)!
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% 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:
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
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 . 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.
Tags und Links objective-c class-reference