NSKeyedArchiver write XML (oder andere menschenlesbare)?

8

Ich habe versucht, den NSKeyedArchiver dazu zu bringen, meine Daten in einer für Menschen lesbaren Form auszugeben (d. h. nicht als Binärdatei). Ich verstehe, dass ich ...

verwenden kann %Vor%

Aber ... ich kann einfach nicht die Syntax richtig finden, kann mir jemand in die richtige Richtung zeigen?

%Vor%

BEARBEITEN

Ich habe setOutputFormat hinzugefügt (siehe unten), aber beim Kompilieren bekomme ich eine Warnung, was fehlt mir?

%Vor%

Hier ist der Code, den ich benutzt habe.

%Vor%

Gary

    
fuzzygoat 30.10.2009, 17:30
quelle

4 Antworten

17

Das musst du tun:

%Vor%

Beachten Sie, dass Sie [archiver encodeObject:artistCollection forKey:@"root"] anstelle von [archiver encodeRootObject:artistCollection]; verwenden müssen, wie von Sean vorgeschlagen. Dies liegt daran, dass NSKeyedArchiver NSCoder encodeRootObject: method nicht überschreibt. Ich halte dies für einen Fehler und werde es Apple melden.

Nun, die eigentliche Frage ist, warum Sie XML anstelle des Standard-Binärformats schreiben wollen? Wenn es zum Zweck der Fehlersuche ist, schlage ich vor, dass Sie TextWrangler verwenden, mit dem Sie Binär-Plist-Dateien transparent bearbeiten können, als ob sie waren XML.

    
0xced 31.10.2009, 21:19
quelle
2

Sie müssen zuerst eine Instanz von NSKeyedArchiver erstellen, anstatt die praktische Klassenmethode zu verwenden, die nur eine NSData zurückgibt.

%Vor%

Haftungsausschluss: Ich habe diesen Code hier in das Eingabefeld geschrieben und nicht wirklich getestet.

    
Sean 31.10.2009 19:28
quelle
1

'archivedDataWithRootObject:' ist eine Klassenmethode, während 'setOutputFormat' eine Instanzmethode ist. Aus der Dokumentation für 'archivedDataWithRootObject:':

  

Ein NSData-Objekt, das die codierte Form des Objektdiagramms enthält, dessen Stammobjekt rootObject ist. Das Format des Archivs lautet NSPropertyListBinaryFormat_v1_0.

Sie müssen einen NSKeyedArchiver erstellen und das Root-Objekt codieren. Stellen Sie außerdem sicher, dass alle Inhalte Ihrer Sammlung "encodeWithCoder" und "initWithCoder" implementieren. Sehen Encoding and Decoding Objects

Das Problem bei diesem Ansatz besteht darin, dass Sie für jedes Objekt, das Sie kodieren, manuell Schlüssel zuweisen müssen. Es klingt nicht wie gewünscht, da Sie bereits eine Sammlung haben. Sowohl Arrays als auch Wörterbücher enthalten Methoden zum Schreiben in eine XML-Datei, was ein viel einfacherer Ansatz ist.

%Vor%

Diskussion über diese Methode (für NSDictionary und NSArray):

  

Wenn der Inhalt des Empfängers alle Eigenschaftenlistenobjekte (NSString-, NSData-, NSArray- oder NSDictionary-Objekte) sind, kann die von dieser Methode geschriebene Datei verwendet werden, um ein neues Array mit der Klassenmethode arrayWithContentsOfFile: oder der Instanzmethode initWithContentsOfFile zu initialisieren: . Diese Methode überprüft rekursiv, dass alle enthaltenen Objekte Eigenschaftslistenobjekte sind, bevor die Datei geschrieben wird, und gibt NEIN zurück, wenn alle Objekte keine Eigenschaftslistenobjekte sind, da die resultierende Datei keine gültige Eigenschaftsliste wäre.   Blockquote

    
bobDevil 30.10.2009 17:45
quelle
0
%Vor%     
Azeem.Butt 30.10.2009 17:36
quelle

Tags und Links