2009-11-16 1 views
5

Я заметил, что Apple приступила к использованию zip-архивов для замены пакетов документов (папок, отображаемых как один файл в Finder) в приложениях iWork. Я рассматриваю возможность делать то же самое, что получаю письма поддержки, связанные с моими пакетами документов, которые повреждаются при копировании их на оконный файловый сервер.Использование ZIP-архивов для хранения данных NSDocument

Мои вопросы - вот что было бы лучшим способом сделать это в приложении NSDocument?

Я думаю, самый простой способ будет создать файл каталога обертку, создать архив его и вернуть его в NSDocument в

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

Но я не в состоянии понять, как создать почтовый архив NSFileWrapper.

+0

Развейте: Я закончил с использованием ZipKit http://bitbucket.org/kolpanic/zipkit/wiki/Home, который также поддерживает iPhone OS. –

ответ

5

Если вы просто хотите сделать zip-файл своим форматом (то есть, «mydoc.myextension» на самом деле является zip-файлом), нет удобного встроенного механизма Cocoa для создания zip-архивов с кодом. Взгляните на этот проект Google Code: ziparchive Я не верю, что в этом случае помощь в этом случае будет полезной.

Поскольку вы указали iWork, у меня нет iWork 09, но в предыдущих версиях использовался формат пакета (т. Е. NSFileWrapper был бы идеальным), но zip XML, который описывает структуру документа, сохраняя при этом вложения (такие как встроенные носители, изображения и т. д.) в папке с ресурсами, все внутри пакета. Я предполагаю, что они делают это, потому что XML может быть довольно большим для больших сложных документов, но сжимается очень хорошо, потому что это текст. Это приводит к общему меньшему документу.

Если бы Apple переместила весь документ на один большой zip-архив (который я бы нашел нечетным), они либо извлекли бы необходимые ресурсы в временную папку где-нибудь, либо загрузили все это в память (шаг назад от их пакетного подхода, ИМО). Это соображения, которые вам необходимо учитывать.

+0

Благодарим вас за ответ. Я не знал о проекте ziparchive. Да, они изменили это в iWork'09. Теперь родные файлы - это архивы с zip-архивами. Вы можете разархивировать их и по-прежнему видеть xml и ресурсы. На данный момент я рассматриваю возможность записи NSFileWrapper в каталог temp, застегивая его (то же самое), считывая его обратно и возвращая в вышеупомянутый метод. Это, по-видимому, наилучший способ, поскольку NSDocument обязательно применит все метаданные файлов из предыдущего файла к новому файлу. –

1

Вы хотите взять данные из обертки файла и передать его во что-то вроде ziparchive.

1

Pierre-Olivier Latour написал расширение NSData, которое занимается сжатием ZIP. Вы можете получить его здесь: http://code.google.com/p/polkit/

+0

Хорошая ссылка! Я бы сказал, что если все, что вам нужно, это сжатие, вы можете использовать категорию NSData на CocoaDev (http://www.cocoadev.com/index.pl?NSDataCategory) и удалить все, что вам не нужно. –

1

Я знаю, что это немного поздно для вечеринки, но я думал, что предлагаю еще одну ссылку, которая может помочь любому, кто попадает на этот пост.

Похож образцом ZipBrowser от компании Apple будет хорошее начало http://developer.apple.com/library/mac/#samplecode/ZipBrowser/Introduction/Intro.html

НТН

 Смежные вопросы

  • Нет связанных вопросов^_^