我想为iPhone应用创建自己的数据格式。这些文件的结构类似于例如Apple的iWork文件(.pages)。这意味着,我有一个包含一些文件的文件夹:
The file 'Juicy.fruit' contains:
Fruits
---> Apple.xml
---> Banana.xml
---> Pear.xml
---> PreviewPicture.png
此文件夹“Fruits”应包装在方便的文件'Juicy.fruit'中。压缩是没有必要的。我怎么能实现这个目标?我发现了一些开源ZIP库。但是,我想用iPhones内置库(如果可能的话)构建我自己的数据格式。
祝你好运, 斯蒂芬
答案 0 :(得分:3)
好的,所以我有三种方式来阅读你的问题,这是我对每一个问题的最佳猜测:
.fruit
文件与您的应用相关联(也就是当有人想下载为您的应用制作或由您的应用制作的文件时)。在这种情况下,您可以为您的应用注册协议,如下所述:
iPhone file extension app association
您希望iPhone将.fruit
个文件与您的应用全局关联,在这种情况下,您需要查看Uniform Type Identifiers。基本上,您在安装程序的info.plst
文件中设置了此关联。
您想了解如何将包含文件的文件夹转换为具有.fruit
扩展名的单个文件(包)。
如果是这种情况,那里有很多选择,我没有看到自己的目的。 Microsoft和Adobe都使用标准的zip压缩方法并使用自己的扩展(而不是.zip
)。如果您将任何office 2007文档(例如docx
或Adobe的实验.pdfxml
文件)放入存档实用程序(我喜欢7z,但任何下降的文件都可以),您将获得一个包含多个xml文件的文件夹就像你描述你的情况一样。 (这也是Java的jar
文件类型的工作方式,fyi)。因此,除非你有充分的理由避免使用标准压缩方法(我投票gzip),否则我会跟随行业领先。
我绝对可以理解在各个层面上DIY的冲动,但你基本上都在询问(如果它是#3)你如何创建自己的包装算法,并在阅读了一些最基本的压缩方法后如何工作,我会留下一个人。另外,我真的怀疑Apple已经内置了一些库,可以让大多数人只使用标准方法。
最后一点:
如果您真的想要从头开始(仍然建议不要),因为您的文件都是XML,您可以创建一个新的XML文件,它将充当各种类型的包装,并让每个文件都进入包装文件。但是当打开时,这将是多余的,因为它必须每次都加载整个文件。但它会是这样的:
Juicy.fruit --
<fruit-wrapper>
<fruit>
<apple>
... content from apple.xml
</apple>
</fruit>
<fruit>
<banana>
... content from banana.xml
</banana>
</fruit>
<fruit>
<pear>
... content from pear.xml
</pear>
</fruit>
<picture>
...URL-encoded binary of preview picture
</picture>
</fruit-wrapper>
但是有了这个想法,你要么必须选择解压缩它,因此有可能失去对文件的跟踪,覆盖一些但不是全部等等,或者你总是将它视为一个大文件,在这种情况下,不像对于存档,您必须每次都加载所有数据以提取任何内容,而不是仅仅从存档中提取所需的文件。
但是,如果你有决心,它可以奏效。
此外,如果您感兴趣,还有专门针对移动设备上的XML的传输协议WBXML(Wap二进制XML)。不确定它是否仍然被认真对待,但如果有一个iPhone库,你应该研究它。