Speichern eines datenArrays auf Festplatte als XML Datei

M

michael m.

Aktives Mitglied
Thread Starter
Dabei seit
29.12.2006
Beiträge
407
Reaktionspunkte
6
Hi,

ich bin schon völlig verzweifelt, weil ich das Schreiben eines Arrays anhand eines Beispiels aus einem Buch geklappt hat.
Ich wollte dies jetzt in meinem eigenem Projekt implementieren und dort funktioniert es leider nicht.

In der Konsole wird folgendes ausgegeben:
Konsolenausgabe.jpg

Das Array wird mit folgenden Zeilen geschrieben:
Code:
// Schreiben des Daten-Arrays auf die Festplatte
[datenArray writeToFile:exportDateiMitPfad atomically:YES];

Die Pfade für den import und export stimmen und liegen im gleichen Verzeichnis.
Da die Daten importiert werden, wird die zu importierende Datei gefunden.

Der erste Datensatz wird bearbeitet und in ein Objekt gesteckt, welches dann in das Daten-Array
hinzugefügt wird.

Code:
// Tagessatz-Objekt an das datenArray anhängen
[datenArray addObject:tagesSatz];
NSLog(@"Das Daten-Array hat %lu Tagessatz-Objekte", [datenArray count]);

Leider wird die xml Datei aber nicht gefunden, daher gehe ich davon aus, das diese nicht erstellt wird.
Habe lange gesucht, verglichen und einiges Ausprobiert, aber ich komme nicht drauf.

Vielleicht sieht ja jemand einen Fehler?

Vielen Dank
Michael
 
Mittlerweile habe ich das ganze noch mehr eingegrenzt.
Das schreiben der Datei funktioniert bei einer Abänderung des Codes.

Ich habe wahrscheinlich etwas falsch gemacht beim hinzufügen eines Objektes zum Daten-Array.
Ich kann mir durch diesen Test vorstellen, das ich zwar ein Objekt zum Daten-Array hinzugefügt habe, aber nichts im Daten-Array angekommen ist.
Somit war es wohl leer und dann wird wahrscheinlich keine Datei geschrieben?

Also erneut Fehler suchen.

Viele Grüsse
Michael
 
Also ich beschreibe mal was ich da so angestellt habe.

1. Eine CSV Datei wird in ein Array geschrieben, welches durch einen Absatz getrennt wird (Zeilen-Array)
2. Von dem Zeilen-Array nehme ich jetzt den ersten Datensatz der alle Daten eines Tages enthält und schreibe alle Inhalte Semikolon Getrennt in ein weiteres Array (Spalten-Array)
3. Erstelle und Initialisiere ein Objekt der Klasse "Person" und nenne diesen "tagesSatz"
4. Rufe eine Funktion auf und gebe dieser die Parameter "tagesSatz" objekt und das Array "spaltenArray" mit
5. In der Funktion werden alle Werte von dem Spalten Array ausgewertet und die benötigten in das "tagesSatz" Objekt geschrieben.
Die Funktion hat keinen Rückgabewert (void)
Code:
void schreibenPesonenWerte(Person *tagesSatz, NSArray *tagesStrings) {
    // Tagessatz mit Werte füllen
    tagesSatz.datum = entferneAnZeichen([tagesStrings objectAtIndex:13]);
    tagesSatz.uhrzeit = entferneAnZeichen([tagesStrings objectAtIndex:15]);
    tagesSatz.datumUhrzeit = baueDatumUhrzeit(tagesSatz.datum, tagesSatz.uhrzeit);
    usw.

7. Speichern des "tagesSatz" Objektes in das Daten-Array (NSMutableArray)
Code:
// Tagessatz-Objekt in das datenArray anhängen
[datenArray addObject:tagesSatz];
NSLog(@"Das Daten-Array hat %lu Tagessatz-Objekte", [datenArray count]);

8. Um dies zu testen, habe ich dann folgendes im Code angehängt
Code:
// Daten aus dem DatenArray holen um Inhalt zu testen
// Personen-Objekt für das Daten-Array erstellen
Person *personenDaten1 = [[Person alloc] init];
            
// personenDaten1 den ersten Datensatz zuordnen
personenDaten1 = [datenArray objectAtIndex:0];
            
NSLog(@"Daten - Datum %@", personenDaten1.datum);
NSLog(@"Daten - Uhrzeit %@",personenDaten1.uhrzeit);
NSLog(@"Daten - Datum und Uhrzeit %@", personenDaten1.datumUhrzeit);

Es wurden aber die korrekten Werte in der Konsole ausgegeben.

Habe ich jetzt das Objekt "tagesSatz" in das Daten-Array angehängt ??
Müsste eigentlich, weil ich dann dann mit datenArray count gezählt habe und heraus kam 1.

Dann habe ich eine ganz anderes Personen-Objekt erstellt und den ersten Datensatz an position 0 aus dem datenArray eingeladen und habe mittels Punktnotation die gespeicherten Daten wieder heraus bekommen.

Jetzt frage ich mich, ob ich da etwas falsch verstanden habe ?

Viele Grüsse
Michael
 
Falls es noch jemanden interessiert, ich habe heraus gefunden.
Das macht man mit dem Protokoll <NSCoding> und den Datentypen NSData.

Hat sich also hiermit erledigt.
 
Zurück
Oben Unten