【问题标题】:iPad - how should I distribute offline web content for use by a UIWebView in application?iPad - 我应该如何分发离线 Web 内容以供应用程序中的 UIWebView 使用?
【发布时间】:2010-08-18 03:20:32
【问题描述】:

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

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

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

注意事项/问题:

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

【问题讨论】:

  • 您会接受答案和/或奖励赏金吗?如果您需要更多详细信息,请告知。

标签: objective-c cocoa-touch ipad


【解决方案1】:

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

供您参考:

  1. 磁盘空间是我所知道的 iPad 上唯一的限制。但是,如果数据库变得太大,它们往往会变慢。如果您几乎不扫描数据,请直接使用文件系统 - 可能会更快、更便宜。
  2. CoreData 中的索引可以存储所有相关数据。您将可以轻松快速地访问。打开内容将从文件系统中加载它,这快速、便宜且不会占用索引。
  3. 您为什么要这样做?将您的 WebView 重定向到 file:// URL 会产生相同的效果,不是吗?
  4. 现在应该得到答复。

如果您没有控制权,则使用与上述相同的方法,但按照选项四中的建议分别下载每个文件。解压后两种情况基本相同。

如果您有任何问题,请回复。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 2012-10-30
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多