Используйте ZIP-архивы для хранения данных NSDocument - PullRequest
5 голосов
/ 16 ноября 2009

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

Мои вопросы: как лучше всего это сделать в приложении на основе NSDocument?

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

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

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

Ответы [ 4 ]

5 голосов
/ 16 ноября 2009

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

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

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

1 голос
/ 26 марта 2011

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

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

НТН

1 голос
/ 17 ноября 2009

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

1 голос
/ 16 ноября 2009

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

...