iPad - 我应该如何在应用程序中分发UIWebView使用的离线Web内容?

时间:2010-08-18 03:20:33

标签: objective-c cocoa-touch ipad

我正在构建一个需要下载网页内容以便在iPad上进行离线观看的应用程序。目前,我正在从网上加载一些Web内容用于测试目的,并使用UIWebView显示。实现这很简单。现在我需要进行一些修改以支持离线内容。最终,离线内容将下载到用户可选择的捆绑包中。

在我看来,我有很多选择,但我可能错过了一些:

  1. 将内容打包到ZIP(或其他存档)文件中,并在将内容下载到iPad时将其解压缩。
  2. 将内容放在SQLite数据库中。这似乎需要一些第三方库,如FMDB
  3. 使用Core Data。据我所知,这支持多种存储格式,包括SQLite。
  4. 使用文件系统并单独下载每个所需文件。好的,不是真正的捆绑,但也许这是最好的选择?
  5. 考虑/问题:

    1. 每种方法的存储限制和性能限制是什么?每个iPad应用程序是否存在整体存储限制?
    2. 如果我要让用户浏览下载的内容,哪种选项更容易编码?
    3. 似乎启动本地Web服务器将是处理显示内容的运行时方面的最有效方法之一。是否有任何开源示例可以从选项1-3中加载捆绑包?
    4. 另一方面是内容创建,从这个角度来看,拉开内容(选项1)似乎是最简单的。其他选项似乎需要创建工具来支持内容创建者。

2 个答案:

答案 0 :(得分:1)

如果您可以控制内容,我建议混合使用第一个和第三个选项。 如果内容是由您创建的(如级别等),则只需将其存储在服务器上,下载zip并将其存储在本地。使用 CoreData 存储关于您已下载的内容的索引,例如存储在其中的文件夹的路径及其名称/来源/等,但不包括原始数据。数据库不被认为拥有大量原始内容,而是保存结构化数据。即使他们可以 - 也不会这样做。

为了您的考虑:

  1. 磁盘空间是我在iPad上知道的唯一限制。但是,如果数据库变得太大,数据库往往会变慢。如果您几乎不扫描数据,请直接使用文件系统 - 可能会更快,更便宜。
  2. CoreData中的索引可以存储所有相关数据。您将可以非常轻松快捷地访问。打开一个内容将从文件系统加载它,这是快速,便宜并且不会使索引紧张。
  3. 你为什么这样做?将WebView重定向到文件:// URL将具有相同的效果,不是吗?
  4. 现在应该回答。
  5. 如果您没有控制权,请使用与上述相同的内容,但按照选项4中的建议单独下载每个文件。解压后两种情况基本相同。

    如果您有任何疑问,请回来。

答案 1 :(得分:0)

您可以为每个捆绑包创建一个xml文件,其中包含捆绑包中每个文件的路径,将其放在每个捆绑包的公共文件夹中。下载时,首先下载并解析xml,然后逐个下载每个资源。这将为您节省压缩和解压缩内容的开销。在本地为每个包创建一个文件夹,然后在那里重新创建包的文件夹结构。通过这种方式,内容可以在线和离线工作而无需更改。

只需稍加努力,您甚至可以通过在每个资源的xml文件中包含版本号来跟踪文件版本,因此如果您的内容已部分更新,则只需再次下载具有更改版本号的文件。 / p>