Вопрос

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

Мои вопросы заключаются в том, каков был бы наилучший способ сделать это в приложении на основе NSDocument?

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

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

Но я не понимаю, как создать zip-архив NSFileWrapper.

Это было полезно?

Решение

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

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

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

Другие советы

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

Пьер-Оливье Латур написал расширение для NSData, которое занимается сжатием zip-файлов.Вы можете получить это здесь: http://code.google.com/p/polkit/

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

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

HTH

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top