Pergunta

Percebi que a Apple começou a usar arquivos zip para substituir os pacotes de documentos (pastas que aparecem como um único arquivo no Finder) nos aplicativos iWork. Estou pensando em fazer o mesmo, pois continuo recebendo e -mails de suporte relacionados aos meus pacotes de documentos sendo corrompidos ao copiá -los para um servidor de arquivos do Windows.

Minhas perguntas são qual seria a melhor maneira de fazer isso em um aplicativo baseado em NSDocument?

Eu acho que a maneira mais fácil seria criar um invólucro de arquivo de diretório, criar um arquivo e devolvê -lo no NSDocument's

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

Mas não consigo entender como criar um arquivo zip do NSFileWrapper.

Foi útil?

Solução

Se você deseja apenas fazer um arquivo zip seu formato (ou seja, "mydoc.myextension" é na verdade um arquivo zip), não há mecanismo de cacau conveniente e embutido para criar arquivos ZIP com código. Dê uma olhada neste projeto de código do Google: Ziparchive Eu não acredito que um invólucro de arquivos ajudará nesse caso.

Desde que você citou o iWork, eu não possuo o iWork 09, mas as versões anteriores usam um formato de pacote (ou seja, o NSFileWrapper seria ideal), mas zípe do XML que descreve a estrutura do documento, mantendo os anexos (como mídia incorporada, imagens, etc. ) em uma pasta de recursos, tudo dentro do pacote. Suponho que eles façam isso porque o XML pode ser bastante grande para documentos grandes e complicados, mas comprime muito bem porque é o texto. Isso resulta em um documento menor geral.

Se de fato a Apple mudou para tornar o documento inteiro um grande arquivo zip (que eu acharia estranho), eles estariam extraindo os recursos necessários para uma pasta temporária em algum lugar ou carregando tudo na memória (um passo para trás de sua embalagem- abordagem baseada, IMO). Essas são considerações que você precisará levar em consideração também.

Outras dicas

Você vai querer pegar os dados do invólucro de arquivos e alimentá -los para algo como Ziparchive.

Pierre-Olivier Latour escreveu uma extensão para o nsdata que lida com a compressão ZIP. Você pode obtê-lo aqui: http://code.google.com/p/polkit/

Sei que isso é um pouco atrasado para a festa, mas pensei em oferecer outro link que poderia ajudar qualquer pessoa que se depare com este post.

Parece que a amostra ZipBrowser da Apple seria um bom começo http://developer.apple.com/library/mac/#samplecode/zipbrowser/introduction/intro.html

Hth

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top