Используйте ZIP-архивы для хранения данных NSDocument
Я заметил, что Apple начала использовать zip-архивы для замены пакетов документов (папки, которые отображаются в Finder как один файл) в приложениях iWork. Я рассматриваю возможность сделать то же самое, так как продолжаю получать письма поддержки, связанные с повреждением пакетов моих документов при копировании их на файловый сервер Windows.
Мои вопросы, что было бы лучшим способом сделать это в приложении на основе NSDocument?
Я предполагаю, что самый простой способ - создать упаковщик файлов каталога, создать его архив и вернуть в NSDocument.
- (NSFileWrapper *)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError
Но я не понимаю, как создать zip-архив NSFileWrapper.
4 ответа
Если вы просто хотите сделать zip-файл вашим форматом (то есть "mydoc.myextension" на самом деле является zip-файлом), нет удобного встроенного механизма Cocoa для создания zip-архивов с кодом. Взгляните на этот проект Google Code: ziparchive Я не верю, что в этом случае поможет обертка файлов.
Поскольку вы процитировали iWork, я не владею iWork 09, но в предыдущих версиях использовался формат пакета (т. Е. NSFileWrapper был бы идеальным), но архивировал XML, описывающий структуру документа, сохраняя вложения (например, встроенные носители, изображения и т. Д.).) в папке ресурсов, все в пакете. Я предполагаю, что они делают это, потому что XML может быть довольно большим для больших, сложных документов, но сжимается очень хорошо, потому что это текст. Это приводит к общему меньшему документу.
Если бы Apple действительно сделала весь документ одним большим zip-архивом (что я нахожу странным), они либо извлекли бы необходимые ресурсы во временную папку где-нибудь, либо загрузили бы все это в память (шаг назад из своего пакета - основанный подход, ИМО). Это соображения, которые вы должны принять во внимание.
Вы захотите взять данные из оболочки файлов и передать их в нечто вроде ziparchive.
Пьер-Оливье Латур написал расширение для NSData, которое имеет дело со сжатием zip. Вы можете получить его здесь: http://code.google.com/p/polkit/
Я знаю, что это немного поздно для вечеринки, но я решил предложить другую ссылку, которая может помочь любому, кто сталкивается с этим постом.
Похоже, что образец ZipBrowser от Apple был бы хорошим началом http://developer.apple.com/library/mac/
НТН