在iOS4中存储配置的最佳方法是什么?

时间:2012-01-06 07:22:21

标签: iphone objective-c ios ios4

我要写食谱应用程序。在iOS4中存储配置(食谱列表)的最佳方法是什么? XML,JSON文件,核心数据还是其他什么?

3 个答案:

答案 0 :(得分:2)

我会使用SQLite。虽然CoreData在检索方面有一些优势,但实际将数据加载到数据存储中有点困难。您甚至可以使用FMDB之类的东西来包装SQLite,如果这样可以让您更轻松。

由于配方将是HTML,我只是将它们存储在一个列中,其中包含类别,关键字,图像BLOB等的附加列。我还包括一个列,用于存储用户关于每个列的个人注释。配方

如果您的食谱更加结构化,我会将它们作为JSON存储在数据库中,因为我发现XML在iOS上处理起来很麻烦。

答案 1 :(得分:2)

首先,这取决于最初存储数据的位置。您的食谱应用程序是否会自我一致,即它是否包含应用程序中捆绑的所有收据,还是会根据用户交互从网络下载它们? (例如,搜索区域收据或季节性收据等)。

从网络收到(在线应用程序)

在这种情况下,您将按要求从网络下载收据。存储它们的最佳方法是在应用程序运行时将它们动态保留在内存中(内存缓存)。一旦内存压力较低,您将清除内存缓存。收据加载将是惰性的,就像收据在内存缓存中一样,它将从中检索,如果丢失(因为从未加载或清除),它将再次从网络中检索。通过设置网络磁盘缓存(使用标准Cocoa缓存系统或某些开源框架,如MKNetworkKit或ASIHTTPRequest),可以实现很大的改进。在这种情况下,将按以下顺序检索收据:内存缓存,磁盘缓存,网络。然后该应用程序将脱机工作(仅适用于已加载的收据),您永远不必担心收据存储,因为磁盘缓存会处理此问题。

BUNDLED RECEIPTS

通常,收据记忆图可能比收据的简单“数组”稍微复杂一些。如果您将此收据链接到提供它的餐馆,摄影桌等,您可以拥有收据表(“实体”),配料表,餐馆表。在这种情况下,对象图的复杂性使得CoreData是更好的解决方案。您不会关心持久性存储(通常是SQLite并由CoreData框架管理)。 您可能需要在启动时预加载CoreData存储,这可以使用读取原始数据源(xml,json,csv)的“dev app”完成,创建托管对象并将其保存在CoreData存储中。然后,您将获得生成的文件,然后将其保存在捆绑包中。 如果您希望使用从网络获取的新收据更新您的应用程序,而不是每次都发布应用程序更新,则可能会产生额外的复杂性。在这种情况下,最好的流程是: - 将CoreData存储放在应用程序包中 - 首次启动时,将其复制到应用程序沙盒文档区域(或者如果您不想为用户添加额外的备份空间,则应用程序库/缓存;然后保护此区域免受OS缓存自动清理) - 每次您的应用程序从网络中检索新收据(自动或从In App Purchase)解析收到的数据(xml,json,csv,...)并将其保存在CoreData存储中。

这个建议并非来自猜测,而是真实的经验。我开发了几个收据应用程序,尤其是在线应用程序。

答案 2 :(得分:1)

恕我直言我会使用SQLITE,因为它易于使用,并且您始终可以访问组织良好的数据。