Frage

Ich habe ein Wörterbuch von Objekten; sie sind alle POCO-Objekte, die serialisierbar sein sollte. Welche Technik soll ich sehe für diese auf der Festplatte zu schreiben. Ich bin für die einfachste Möglichkeit suchen einige Listen zu schreiben Zustand zu speichern.

Ich glaube, ich habe 3 Optionen.

  1. plist-Dateien. Allerdings scheint dies nur vordefinierte Objekte (Strings, Zahlen usw.) keine Gegenstände (wie eine Person mit einem Namen und Alter) Speichern beschränkt.

  2. Coredata. (Neu in 3.0) Dies würde gut funktionieren; jedoch würde mein Datenmodell ändern muß, um diese Arbeit zu machen. Dies wäre eine massive Nacharbeit und ich bin nicht sicher, ob es ist die Mühe wert.

  3. SQLLite. Implementieren Sie eine einfache SQL-Datenbank und aus zu lesen. Ich habe die geringste Menge an reserch in diese ein getan, aber ich will nicht zu ‚Rewrite‘ einige der Kerndaten ORM-Funktionen haben.

War es hilfreich?

Lösung

Sie tun dies in der gleichen Art und Weise Sie es auf Mac OS X tun würde: Ihr POCOs zum NSCoding Protokoll entsprechen. Siehe hier für eine konzeptuelle Referenz, und hier für die NSCoding Referenz.

Wenn die Daten nicht so verrückt sind umfangreich und Sie haben nicht lächerlich komplizierte Beziehungen zwischen Objekten, alles auszuschreiben als plist ist wahrscheinlich die beste Wahl; es ist sehr schnell auszuführen und einfach in Ihrem Code zu implementieren. Wie Sie gesagt haben, wird Coredata wahrscheinlich ein Los zusätzliche Arbeit Code anzupassen, und SQLite ist wirklich nur gut für die Speicherung von Daten, die in einer relationalen Datenbank gespeichert werden perfekt ist. Beachten Sie, dass SQLite ist auch langsamer und verbraucht mehr Ressourcen als die Arbeit mit binären plists.

Andere Tipps

benutzerdefiniertes Objekt serialisieren Sie müssen nur auf das NSCoding Protokoll entsprechen. Wenn Ihr Objekt erstreckt NSObject alles, was Sie tun müssen, um (glaube ich) ist dieses (Beispiel für Personen-Objekt) zu implementieren:

// Encode an object for an archive
- (void)encodeWithCoder:(NSCoder *)coder
{
    [super encodeWithCoder:coder];
    [coder encodeObject:name forKey:@“Name”];
    [coder encodeInteger:age forKey:@“Age”];
}
// Decode an object from an archive
- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    name = [[coder decodeObjectForKey:@“Name”] retain];
    age  = [coder decodeIntegerForKey:@“Age”];
}

NSArray und NSDictionary bereits Methoden für die Serialisierung implementieren. Sie werden serialisiert werden alle Objekte, die sie halten (wenn Objekte NSCoder Schnittstelle implementieren - sie tun, wenn sie NSObject verlängern). NSObject der encodeWithCoder und initWithCoder nichts tun standardmäßig so, wenn Sie Ihren eigenen Code in Ihren Klassen implementieren nichts serialisiert wird.

Wenn Sie NSArray oder NSDictionary von Objekten haben, können Sie synchronisieren sie mit:

// Writing
- (BOOL)writeToFile:(NSString *)aPath atomically:(BOOL)flag;
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag;
// Reading
- (id)initWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfURL:(NSURL *)aURL;

NSCoder ist das Standard-Cocoa Idiom für die Serialisierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top