2009-11-16 14 views
5

Ich habe festgestellt, dass Apple mit ZIP-Archiven begonnen hat, Dokumentpakete (Ordner, die als einzelne Datei im Finder angezeigt werden) in den iWork-Anwendungen zu ersetzen. Ich denke darüber nach, dasselbe zu tun, wenn ich weiterhin Support-E-Mails bekomme, die mit meinen Dokumenten-Paketen in Verbindung stehen, wenn sie auf einen Windows-Dateiserver kopiert werden.Verwenden von ZIP-Archiven zum Speichern von NSDocument-Daten

Meine Fragen ist, was wäre der beste Weg, dies in einer NSDocument-basierten Anwendung zu tun?

Ich denke, der einfachste Weg, eine Verzeichnisdatei Wrapper zu erstellen wäre, ein Archiv erstellen Sie es und senden Sie es in

- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError 

des NSDocument Aber ich kann nicht verstehen, wie ein Zip-Archiv des NSFileWrapper zu erstellen.

+0

Follow-up ein guter Anfang sein würde: ich am Ende mit ZipKit http://bitbucket.org/kolpanic/zipkit/wiki/Home die auch unterstützt iPhone OS. –

Antwort

5

Wenn Sie nur eine Zip-Datei erstellen möchten (dh "meinDok.meine Erweiterung" ist eigentlich eine Zip-Datei), gibt es keinen praktischen, integrierten Cocoa-Mechanismus zum Erstellen von Zip-Archiven mit Code. Sehen Sie sich dieses Google Code-Projekt an: ziparchive Ich glaube jedoch nicht, dass ein Datei-Wrapper in diesem Fall helfen wird.

Da Sie iWork zitiert haben, besitze ich kein iWork 09, aber frühere Versionen verwenden ein Paketformat (dh NSFileWrapper wären ideal), zippen aber das XML, das die Dokumentstruktur beschreibt, während Anhänge (wie eingebettete Medien, Bilder usw.) in einem Ressourcenordner, alles innerhalb des Pakets. Ich nehme an, dass sie das tun, weil XML für große, komplizierte Dokumente ziemlich groß sein kann, aber sehr gut komprimiert, weil es Text ist. Dies führt zu einem insgesamt kleineren Dokument.

Wenn Apple tatsächlich dazu übergegangen ist, das gesamte Dokument zu einem großen Zip-Archiv zu machen (was ich seltsam finden würde), würden sie entweder die notwendigen Ressourcen irgendwo in einen Temp-Ordner ziehen oder das Ganze in den Speicher laden (ein Schritt zurück) von ihrem paketbasierten Ansatz, IMO). Dies sind Überlegungen, die Sie ebenfalls berücksichtigen müssen.

+0

Vielen Dank für Ihre Antwort. Das Projekt ziparchive war mir nicht bekannt. Ja, sie haben dies in iWork'09 geändert. Jetzt sind native Dateien gezippte Archive. Sie können sie entpacken und trotzdem das XML und die Ressourcen sehen. Im Moment überlege ich, den NSFileWrapper in ein temporäres Verzeichnis zu schreiben, es zu zippen (dito), es wieder einzulesen und es in der oben erwähnten Methode zurückzugeben. Dies scheint der beste Weg zu sein, da NSDocument sicherstellen wird, dass alle Datei-Metadaten aus der vorherigen Datei auf die neue Datei angewendet werden. –

1

Sie möchten die Daten aus dem Dateiwrapper nehmen und in etwas wie ziparchive füttern.

1

Pierre-Olivier Latour hat eine Erweiterung von NSData geschrieben, die sich mit Zip-Komprimierung beschäftigt. Sie können es hier bekommen: http://code.google.com/p/polkit/

+0

Netter Link! Ich würde sagen, dass, wenn alles, was Sie wollen, Komprimierung ist, Sie die NSData-Kategorie auf CocoaDev (http://www.cocoadev.com/index.pl?NSDataCategory) verwenden und alles entfernen können, was Sie nicht brauchen. –

Verwandte Themen