【问题标题】:best way to store data locally and update from web from time to time?在本地存储数据并不时从网络更新的最佳方式?
【发布时间】:2010-01-31 19:30:14
【问题描述】:

我创建了一个应用程序,它以有条理的方式显示有关文化场所的信息。 信息可能会发生变化,所以我希望它是从网上下载的。但不是每次。只是偶尔一次,因为信息不会经常变化。

我想要做的是,用户第一次打开应用程序时,它会从网络上下载所有数据。目前,我从一个 xml(大约 100Ko)中解析它,并得到一个“CulturalPlace”对象的 NSMutableArray。但它很慢。而我想做的是,在本地存储这些数据(如果用户有一个 iPod touch 并且不在 wifi 上,或者如果他在 EDGE 上并且不想重新下载所有数据)。因此,用户只需单击屏幕右上角的“更新按钮”即可更新数据。否则从磁盘读取。

我真的不知道什么是最好的解决方案。我考虑过 Core Data,但我有几个 Tableview 叠瓦(Rootviewcontroller > ListofPlacesViewController > PlaceViewController),我真的找不到像我这样简单使用的好教程。 (iTunes“TopSongs”示例代码似乎太复杂了)。

我还考虑过不解析 xml,而是尝试使用 NSURLConnection 并获取 plist 文件。但我从未设法从本地文件中读取任何内容。

所以我的主要问题是,我应该保留 xml 解析方法,还是应该使用其他格式从网络传输数据?以及像自定义对象的 NSMutableArray 这样存储和读取数据的最佳方式是什么?

提前感谢您的帮助,抱歉我的英文大概是这样的。

【问题讨论】:

    标签: iphone data-management


    【解决方案1】:

    您可以使用HTML5' localStorage。 PC 上的 Chrome 和 FF 以及 Mac OS 和 iPhone 上的 Safari 都支持它(据我所知)。它就像一个本地数据库。请记住,如果用户选择清除所有 cookie(或“私人设置”),您的存储空间就会消失。

    【讨论】:

    • 您好,感谢您的回答。我看了一点,但我不确定我是否可以在我的应用程序中使用它,因为我自己在我的应用程序中解析文件,而不是通过 safari。我不确定 iPhone 应用是否支持这种存储。
    • 您可以保存解析结果并节省重新解析的时间。另外,使用 SQLite 怎么样?
    【解决方案2】:

    您可以选择在本地存储 XML,并在 NSUserDefaults 中存储上次更新的日期 - 然后在应用启动时,您可以检查是否有新文件。

    ASIHTTPRequest 可以很容易地说“将此 URL 的内容保存到文件”。因此,您始终将 XML 保存到文件中,并且始终从该文件中读取或获取 XML(如果尚不存在)。

    【讨论】:

      【解决方案3】:

      根据我的经验,XML 的解析确实比 plist 慢得多,尽管它们在技术上是相同的。幸运的是,plist 很容易处理,API 负责所有归档和取消归档。

      一旦您将数据存储在内存中,将其转换为更快的 plist 表示可能不会太难,请查看此文档了解更多信息:http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Archiving/Archiving.html

      如果您的应用分为不同的页面,您还可以考虑将文件拆分为单独的文件,并仅在需要时解析/取消归档您需要的信息(如果您在单独的线程中执行此操作并显示UIProgressView 在主线程上,延迟可能对用户来说几乎不是问题)。

      【讨论】:

        猜你喜欢
        • 2010-09-14
        • 1970-01-01
        • 2011-11-08
        • 2012-03-09
        • 1970-01-01
        • 2014-06-20
        • 2021-12-04
        • 1970-01-01
        • 2018-12-01
        相关资源
        最近更新 更多