2009-07-09 12 views
20

Ich möchte ein NSMutableArray von NSStrings zu einer meiner Entitäten in meinem Kerndatenmodell hinzufügen. Das Problem ist, dass dies kein unterstützter Typ in Core Data ist.Speichern eines NSMutableArray in Core-Daten

Ich habe versucht, ein transformable-Attribut zu machen, aber das Problem ist, dass ich keine Möglichkeit sehe, ein NSMutableArray zu NSData zu machen und dann von NSData zurück zu einem NSMutableArray. Hat jemand eine Idee, wie dieses Problem gelöst werden kann?

(Ich weiß, ich kann das Array archivieren, aber ich möchte das nicht tun, ich möchte es in meinem Modell vorhanden sein).

Antwort

32

Sie könnten ein binäres Datenattribut in Ihrem modellierten Objekt haben, das Array in Daten archivieren und es an das Objekt übergeben.

Aber ich denke, der bessere Weg wäre, eine To-Viele-Beziehung zu haben, anstatt ein Array direkt zu verwenden.

**** Edit: Hier ist, wie das Array in NSData zu archivieren, so dass es ***

in Ihrem verwalteten Objekt verwendet werden kann
NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:[NSArray arrayWithObjects:@"1",@"2", nil]]; 

Grundsätzlich jede Klasse, die Sie haben, die mit dem NSCoding Protokoll entspricht kann auf diese Weise archiviert werden. NSArray/NSMutableArray ist bereits konform. Sie sagen allen ihren Objekten, sich selbst zu archivieren, also müssen sie sich auch anpassen. Und alle Mitglieder dieser Objekte müssen sich anpassen usw. Es ist wie ein Baum.

Da Ihr Array konform ist, und es ist ein Array von NSString (die auch konform), dann sind Sie golden.

+1

Aber hier haben wir eine Reihe von einfachen Zeichenfolgen - müssten Sie jede Zeichenfolge in ein verwaltetes Objekt umbrechen, oder gibt es irgendeine Art von NSManagedObject Wrapper um NSString bereits verfügbar? –

+0

Wie Sie das Array von Zeichenfolgen zu Daten ?? (Ich habe einen Workaround für dieses Problem gefunden, bei dem ich kein Array mit Strings verwenden musste, aber ich bin immer noch neugierig auf eine Lösung) – gburgoon

+9

Das Gegenteil ist 'NSArray * array = [NSKeyedUnarchiver unarchiveObjectWithData: arrayData];' – Resh32

Verwandte Themen