ZIP アーカイブを使用して NSDocument データを保存する
-
20-09-2019 - |
質問
Apple が iWork アプリケーションのドキュメント パッケージ (Finder では単一のファイルとして表示されるフォルダー) を置き換えるために zip アーカイブを使い始めたことに気づきました。ドキュメントパッケージを Windows ファイルサーバーにコピーするときに破損するというサポートメールが頻繁に届くので、同じことをしようと検討しています。
私の質問は、NSDocument ベースのアプリケーションでこれを行う最良の方法は何でしょうか?
最も簡単な方法は、ディレクトリファイルラッパーを作成し、そのアーカイブを作成してNSDocumentの中で返すことだと思います
- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError
しかし、NSFileWrapperのzipアーカイブを作成する方法がわかりません。
解決
あなただけのzipはあなたの形式(すなわち、「mydoc.myextension」が実際にzipファイルである)ファイルを作成したい場合は、便利な内蔵ココアメカニズムコードをzipアーカイブを作成するために、ありません。このGoogle Codeのプロジェクトを見てみましょう: ZIPARCHIVE の私は、ファイル・ラッパーが役立つとは思いませんその場合には、しかし。
あなたはiWorkのを引用しているので、私はiWorkの09を所有していませんが、埋め込みメディアなどの添付ファイル(画像を維持しながら、以前のバージョンでは、パッケージ形式を使用します(つまり、NSFileWrapperは理想的である)が、文書の構造を記述するXMLを圧縮します、など)リソースフォルダ内の、すべてのパッケージ内。私は、XMLが大きい、複雑な文書のために非常に大きくなる可能性があるため、彼らはこれを行うと仮定し、それはテキストなので、非常によく圧縮します。これは、全体の小さなドキュメントになります。
確かにAppleは(私は奇妙な見つけるだろう)、文書全体の一つの大きなzipアーカイブを作るに移動した場合は、、彼らは(ステップ後方からどこかに一時フォルダに必要なリソースを抽出するか、メモリに全部を読み込むことだろうどちらか彼らのパッケージベースのアプローチ、IMO)。これらは、あなたにも考慮に入れる必要があります考慮事項です。
他のヒント
ファイル・ラッパーからデータを取得し、 ZIPARCHIVE <ような何かにそれを供給することをお勧めします/>。
ピエール・オリヴィエ・ラトゥールは、ZIP圧縮を扱ったNSDataへの拡張を書きました。あなたはここでそれを得ることができます: http://code.google.com/p/polkit/
パーティーには少し遅れていることは承知していますが、この投稿に出会った人を助けることができる別のリンクを提供したいと思いました。
Apple の ZipBrowser サンプルが良いスタートになるようです http://developer.apple.com/library/mac/#samplecode/ZipBrowser/ Introduction/Intro.html
HTH