Wo speicher ich Benutzerdaten?

  • Ersteller developsoftware
  • Erstellt am
D

developsoftware

Neues Mitglied
Thread Starter
Dabei seit
10.06.2013
Beiträge
5
Reaktionspunkte
0
Hallo Community,

Ich bin gerade dabei eine App für das iPad zu programmieren. Es sollte eine App werden die ein Formular beinhaltet mit mehreren Seiten. Meine Frage ist wo ich diese Daten Abspeicher die der Nutzer eingibt? (Es handelt sich um ca 50 Strings und 5 Bilder ca)

Derzeit habe ich Variablen in der Klasse AppDelegate angelegt und mit:

Code:
[COLOR=#3495AF][FONT=Menlo]AppDelegate [/FONT][/COLOR][FONT=Menlo]*appData;
[/FONT][COLOR=#3495AF][FONT=Menlo]appData[/FONT][/COLOR][COLOR=#000000][FONT=Menlo] = ([/FONT][/COLOR][COLOR=#3495AF][FONT=Menlo]AppDelegate[/FONT][/COLOR][COLOR=#000000][FONT=Menlo] *)[[[/FONT][/COLOR][COLOR=#3495AF][FONT=Menlo]UIApplication[/FONT][/COLOR][COLOR=#3495AF][FONT=Menlo]sharedApplication[/FONT][/COLOR][COLOR=#000000][FONT=Menlo]] [/FONT][/COLOR][COLOR=#3495AF][FONT=Menlo]delegate[/FONT][/COLOR][COLOR=#000000][FONT=Menlo]];[/FONT][/COLOR]

darauf zugegriffen.

Ist das eine gute Lösung oder mache ich grundsätzlich etwas falsch damit?

Vielen Dank!
 
Hallo,

Ist das eine gute Lösung oder mache ich grundsätzlich etwas falsch damit?
Das ist mit Deinen gegebenen Informationen so eigentlich nicht zu beantworten.

Prophylaktisch sage ich aber mal - ja, das ist falsch.

Ich fasse in Wort zusammen, wie das bei mir aussehen könnte.
Beim Öffnen der Anwendung erzeugt das Delegate von UIApplication einen Controller für das Formular.
Gehen wir davon aus, dass unsere eigenen Klassen mit "TT" beginnen, dann heißt die Klasse, der zu erzeugenden Instanz "TTFormularDataController".
Das Objekt von TTFormularController muss eine beliebige Anzahl von Fragen, Eingaben etc. aufnehmen können. D.h. wir brauchen für jeden Punkt eine Instanz von einer Klasse "TTFormularDataItem".
Diese hält jeweils selbst ihre "Frage" und "Antwort".
Deine Antworten können einfache Ja/Nein-Werte, oder aber auch eigenen Texteingaben sein.

Das ist quasi schon die Schicht, die die Daten hält…

Den Inhalt, den der Anwender sieht, schreibst Du aber komplett unabhängig von den Daten.
D.h. Dein Delegate von UIApplication erzeugt einen weiteren Controller - nennen wir ihn z.B. "TTFormularViewController".
Dieser bekommt z.B. beim Erzeugen die Instanz von "TTFormularDataController" mit übergeben.
So kann sich das View-Dingens die Daten aus dem Schnick-Data ziehen.

Das wäre trivial gesagt der einfache Aufbau, wie ich mir das jetzt so mit Deinen spärlichen Informationen herleiten würde.

Die Frage ist aber nun: Was meinst Du mit speichern?

Ich habe Dir jetzt die "Haltung" der Daten in der Anwendung erklärt, da ich das auf Grund Deiner Frage nach "Klasse" so impliziert habe.

Möchtest Du die Daten permanent sichern, dann schaue Dir mal den Aufbau einer Plist an, die Du lokal auf dem Gerät sichern kannst.
Vermutlich ist der Sinn Deines Formulars aber der, dass Du die Daten via Internet versenden möchtest.

Viele Grüße
 
Bildhaft

Ich habe hier eine kleine Skizze gezeichnet:
http://image-upload.de/image/I0bLnd/28c83c609b.jpg
Diese soll zeigen dass die Daten nur für die Laufzeit der App gehalten werden sollen. Die Funktion der App ist folgende:

Der Nutzer gibt in das Formular Daten ein. Diese sollen intern gehalten werden und wenn der Nutzer schlussendlich auf Absenden drückt soll ein Formular erstellt werden mit den Daten.
Danach können die Daten wieder freigegeben werden.

Ich will darauf verzichten eigene Klassen anzulegen in denen die Daten gespeichert (gehalten) werden. Wenn dann nur eine Klasse in der alles gespeichert wird (Ich dachte die AppDelegate wäre sinnvoll weil diese die ganze Laufzeit lang aktiv ist).

Vielen Dank
 
warum willst du die als globale variablen haben?
ist es notwendig, denn sauber objektorientiert ist das nicht...

wenn die bei eingabe versendet werden sollen, ist es doch zweckmäßiger die in der controller klasse der eingabe zu haben...
 
Hallo,

Ich habe hier eine kleine Skizze gezeichnet:
Das ist als solches auch nicht falsch, nur fehlen die Instanzen, die die Pfeile repräsentieren.

Ich will darauf verzichten eigene Klassen anzulegen in denen die Daten gespeichert (gehalten) werden. Wenn dann nur eine Klasse in der alles gespeichert wird (Ich dachte die AppDelegate wäre sinnvoll weil diese die ganze Laufzeit lang aktiv ist).
Übertrieben gesagt hat das aber nichts mit "sauberer/guter Programmierung" zutun.
Warum möchtest Du nicht mehrere Klassen erzeugen - gibt es dafür einen Grund?

An Deiner Stelle würde ich das komplette Formular, ohne Eingaben, in einer Plist abbilden.
Diese ist Bestandteil der Anwendung und das gezeigte Formular wird auf Grund der Plist aufgebaut.
So kannst Du in Sekunden das Formular anpassen ohne etwas dafür programmieren zu müssen.
D.h. auf Grund der Plist baut sich der Inhalt der Anwendung selbst auf.

Denk mal drüber nach… :)

Viele Grüße
 
Warum möchtest Du nicht mehrere Klassen erzeugen - gibt es dafür einen Grund?
Viele Grüße

Weil die Daten miteinander nicht viel zu tun haben, sprich ich müsste für 2 Daten Felder eine eigene Klasse eröffnen was bei ca 50 Eingaben zu 25 Klassen führt und somit nicht wirklich übersichtlicher ist.

Die Idee mit dem Plist abspeichern klingt recht interessant jedoch sind die Eingaben nicht nur einfache Eingaben wie Text oder so etwas sondern auch teilweise Bilder und die GUI ist teilweise komplexer als das sie leicht zu programmieren wäre.

Ich war am überlegen die Daten in eine Datei zu speichern jedoch erschien mir das nicht sehr effizent und schnell.

wenn die bei eingabe versendet werden sollen, ist es doch zweckmäßiger die in der controller klasse der eingabe zu haben...

Ich habe jedoch mehrere Eingabecontroller.

LG
 
Weil die Daten miteinander nicht viel zu tun haben, sprich ich müsste für 2 Daten Felder eine eigene Klasse eröffnen was bei ca 50 Eingaben zu 25 Klassen führt und somit nicht wirklich übersichtlicher ist.
Das glaube ich Dir nicht ;)
Da liegt vermutlich ein Logikfehler bei Dir vor.

Die Idee mit dem Plist abspeichern klingt recht interessant jedoch sind die Eingaben nicht nur einfache Eingaben wie Text oder so etwas sondern auch teilweise Bilder und die GUI ist teilweise komplexer als das sie leicht zu programmieren wäre.
Na dann wirst Du aber mit einer misshandelten Klasse nicht gerade gut zurecht kommen.
In der Plist kannst Du ja auch Pfade angeben. Du mußt da keine Bilder sichern.

Ich war am überlegen die Daten in eine Datei zu speichern jedoch erschien mir das nicht sehr effizent und schnell.
Auch wenn die iOS Geräte "begrenzt" sind, so mache Dir über Effizienz vorerst mal keine Sorgen.
Schreibe lieber sauberen Code ohne dadrüber nachzudenken "ist das schnell", "geht das schneller…" etc.
Solltest Du beim Verwenden der Anwendung auf dem Gerät ein Problem feststellen, dann kannst Du Dir brisanten Stellen immer noch durchschauen.

Viele Grüße
 
Ok ich muss zugeben das mit den 25 Klassen ist vielleicht bissi übertrieben :D

Nehmen wir an ich programmier alles mit Klassen. Wo speicher ich die Instanz der Klasse ab?

Ich habe jetzt zum Beispiel 3 Klassen: Satz - Wort - Buchstabe.
Die 3 Klassen haben untershciedliche Eigenschaften (Länge,Größe,was auch immer)

In View1 werden die Eigenschaften von Satz gesetzt.
In View2 werden die Eigenschaften von Wort gesetzt.
In View3 werden die Eigenschaften von Buchstabe gesetzt.

In viewAbsenden wird das Formular aus den Klassen generiert und versendet. Wo speicher ich jetzt meine Instanz von Satz ab?

LG
 
Mh, das verstehe ich jetzt leider nicht.

Die Instanzen "leben" doch so lange, wie die Anwendung geöffnet ist.
Du wolltest die Werte nicht sichern, sondern nur zur Laufzweit verwenden.

Wie das "klug" funktioniert habe ich Dir in meiner ersten Antwort beschrieben.

Mehr kann man/ich Dir nicht sagen, da einem/mir der Bezug zur Aufgabe fehlt.

Viele Grüße
 
Ok. Ich denke ich habe verstanden was du meinst ;)
Ich werde die App irwie mit Klassen schreiben.
Danke!

Gibt es bei 50 Strings die gehalten werden ein Arbeitsspeicherproblem?
 
Zurück
Oben Unten