5

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

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

最も簡単な方法は、ディレクトリファイルラッパーを作成し、そのアーカイブを作成して、NSDocumentに返すことだと思います。

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

しかし、NSFileWrapperのzipアーカイブを作成する方法を理解できません。

4

4 に答える 4

5

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

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

実際に Apple がドキュメント全体を 1 つの大きな zip アーカイブにする方向に進んだ場合 (これは奇妙だと思います)、必要なリソースをどこかの一時フォルダーに抽出するか、全体をメモリにロードします (パッケージから一歩後退します-ベースのアプローチ、IMO)。これらも考慮に入れる必要がある考慮事項です。

于 2009-11-16T13:17:58.940 に答える
1

ファイルラッパーからデータを取得し、ziparchiveなどにフィードする必要があります。

于 2009-11-16T18:49:03.813 に答える
1

私はこれがパーティーに少し遅れていることを知っていますが、私はこの投稿に出くわす人を助けることができる別のリンクを提供すると思いました。

AppleのZipBrowserサンプルが良いスタートになるようですhttp://developer.apple.com/library/mac/#samplecode/ZipBrowser/Introduction/Intro.html

HTH

于 2011-03-26T01:19:58.443 に答える
1

Pierre-Olivier Latour は、zip 圧縮を扱う NSData の拡張機能を作成しました。ここから入手できます: http://code.google.com/p/polkit/

于 2009-11-16T21:15:27.167 に答える