2009-11-16 13 views
5

AppleがiWorkアプリケーションでzipアーカイブを使用して、ドキュメントパッケージ(Finderで単一のファイルとして表示されるフォルダ)を置き換えることに気付きました。 Windowsのファイルサーバーにコピーする際に、ドキュメントパッケージに関連するサポート電子メールが破損し続けるのと同じように、私は同じことを検討しています。ZIPアーカイブを使用してNSDocumentデータを保存する

私の質問は、NSDocumentベースのアプリケーションでこれを行うための最良の方法は何でしょうか?

私は最も簡単な方法は、NSDocumentのの

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

で、ディレクトリのファイル・ラッパーを作成し、それのアーカイブを作成し、それを返すことであろうと思います。しかし、私はNSFileWrapperのzipアーカイブを作成する方法を理解することができません。

+0

はフォローアップ:私はこれもZipKit http://bitbucket.org/kolpanic/zipkit/wiki/Homeを使用して終了しましたiPhone OSをサポートしています。 –

答えて

5

zipファイルを自分のフォーマット(つまり、 "mydoc.myextension"は実際にはzipファイル)にしたいのであれば、コード付きのzipアーカイブを作成する便利な組み込みのCocoaメカニズムはありません。このGoogleコードプロジェクトを見てください:ziparchive私はファイルラッパーがその場合に役立つとは思わない。

あなたはiWorkを引用しているので、私はiWork 09を所有していませんが、以前のバージョンではパッケージフォーマット(NSFileWrapperが理想的です)を使用していましたが、イメージなど)をすべてパッケージ内のリソースフォルダに保存します。 XMLは大規模で複雑な文書ではかなり大きくなる可能性があるが、テキストであるために非常にうまく圧縮されるため、これを行うと仮定します。これにより、文書全体が小さくなります。

アップル社が文書全体を1つの大きなzipアーカイブ(私は奇妙だと思います)に移した場合、どこかの一時フォルダに必要なリソースを抽出するか、全体をメモリにロードします彼らのパッケージベースのアプローチから、IMO)。これらも考慮に入れる必要があります。

+0

お返事ありがとうございます。私はziparchiveプロジェクトを知らなかった。 はい、iWork'09でこれを変更しました。現在、ネイティブファイルは圧縮されたアーカイブです。それらを解凍しても、xmlとリソースが表示されます。 現時点では、NSFileWrapperをtempディレクトリに書き込んだり、それを圧縮したりして、上記の方法でそれを読み込んで返します。これは、NSDocumentがすべてのファイルメタデータを前のファイルから新しいファイルに確実に適用するための最良の方法です。 –

1

ファイルラッパーからデータを取り出し、ziparchiveのようなものにフィードしたいと思うでしょう。

1

Pierre-Olivier Latourは、Zip圧縮を扱うNSDataの拡張を書いています。あなたはここにそれを得ることができます:http://code.google.com/p/polkit/

+0

ニースリンク!私は、圧縮が必要な場合は、CocoaDev(http://www.cocoadev.com/index.pl?NSDataCategory)でNSDataカテゴリを使用し、必要のないものを削除することができます。 –

関連する問題