2 Stimmen

Wie bekomme ich Core Data-Daten in ein Array von Arrays? Zur Verwendung mit dem CHCSVWriter von Dave DeLong

Ich denke, dies ist ziemlich einfach, aber ich bin neu in Objective-C, IOS und Core Data.

Ich habe eine Kerndatenentität namens EnquiryStore, die verschiedene Attribute wie "Name", "Adresse", "Anfrage" usw. enthält.

Ich kann die Ergebnisse problemlos abrufen, aber ich habe Schwierigkeiten zu verstehen, wie die Ergebnisse gespeichert werden! Das macht es mir schwer, den nächsten Teil meines Programms zu machen, der darin besteht, die Daten mit Dave DeLongs CHCSVWriter nach CSV zu exportieren. Ich verstehe, dass die Verwendung von

[array writeToCSVFile:outputCSVFile atomically: NO];

Es wird ein Array von Arrays akzeptiert, ist das, was Core Data mir gibt? Denn ich kann es nicht bekommen, um mit dieser Methode zu arbeiten.

Ich könnte Folgendes gebrauchen

[myCSVWriter writeField: ...];
[myCSVWriter writeLine];

aber das scheint langwierig zu sein, da ich die Zeichenfolge aus jedem Attribut von Core Data erstellen muss.

3voto

Matthias Bauch Punkte 88797

Sie sind die einzige Person, die weiß, wie Ihr NSManagedObject aussieht. Es könnte Beziehungen enthalten, die sich unmöglich in eine CSV-Datei übertragen lassen. Es könnte binäre Daten enthalten, die in einer csv-Datei nicht sehr nützlich wären. Oder es könnte einfach Attribute enthalten, die Sie nicht exportieren möchten. Außerdem müssen Sie entscheiden, in welcher Reihenfolge Sie Ihre CSV-Datei exportieren möchten.

Es ist einfach, ein NSArray (d.h. die Liste der NSManagedObjects, die Sie exportieren möchten) von NSArray (d.h. die Liste der exportierten Attribute für dieses Objekt) zu erstellen. Führen Sie einfach eine Aufzählung aller NSManagedObjects durch und füllen Sie ein Array mit den Werten, die Sie exportieren möchten.

Sie könnten etwa so vorgehen:

NSArray *objectsForExport = ... /* get it through a fetch request... helper function... whatever */
NSArray *exportKeys = [NSArray arrayWithObjects:@"foo", @"bar", @"name", @"city", @"address", nil];

NSMutableArray *csvObjects = [NSMutableArray arrayWithCapacity:[objectsForExport count]];
for (NSManagedObject *object in objectsForExport) {
    NSMutableArray *anObjectArray = [NSMutableArray arrayWithCapacity:[exportKeys count]];
    for (NSString *key in exportKeys) {
        id value = [object valueForKey:key];
        if (!value) {
            value = @"";
        }
        [anObjectArray addObject:[value description]];
    }
    [csvObjects addObject:anObjectArray];
}

und schon haben Sie Ihr Array der Arrays.

Ich glaube, es gab eine Methode, die ein NSArray von Werten zurückgegeben, wenn Sie es ein NSArray von Schlüsseln übergeben, aber ich kann es nicht finden, und ich kann mich nicht erinnern, seinen Namen oder sogar zu welcher Klasse es gehörte.

2voto

Dave DeLong Punkte 240835

Der Ansatz "writeField:" mag zwar langatmig erscheinen, ist aber auch der anschaulichste:

CHCSVWriter *writer = [[CHCSVWriter alloc] initWithCSVFile:@"/Path/To/CSV/File.csv" atomically:NO];

NSArray *myArrayOfManagedObjects = ...;
for (NSManagedObject *obj in myArrayOfManagedObjects) {
  [writer writeField:[obj valueForKey:@"attribute1"]];
  [writer writeField:[obj valueForKey:@"attribute2"]];
  [writer writeField:[obj valueForKey:@"attribute3"]];
  [writer writeField:[obj valueForKey:@"attribute4"]];
  [writer writeLine];
}

[writer closeFile];
[writer release];

Beachten Sie, dass writeField: nimmt eine id als Parameter, nicht ein NSString* . Sie können ihm jedes beliebige Objekt übergeben, das Sie CHCSVWriter wird das Objekt in der -description und schreiben Sie das auf. (Dies geschieht sogar mit NSString Dies geschieht, weil einige Änderungen an dem Wert vorgenommen werden müssen (z. B. die Feststellung, ob das Feld in Anführungszeichen gesetzt werden muss).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X