保存数据以便在运行时使用

时间:2013-04-27 16:59:48

标签: ios nscoding property-list nsarchiving

我正在尝试构建一个iOS应用程序,它可以显示来自.xlsx(MS Excel文件)的用户数据。该文件有近11,000行,每行20列。我已经构建了一个解析器来将每一行转换为NSObject的子类,每列都是一个实例变量。我将其设为NSCoding,将每个实例添加到NSDictionary,其中的密钥是原始文件的第一行,并将其存档。我的问题是,我不想取消归档如此庞大的NSDictionary,最多可以访问20个或其中的对象,我可能需要在任何给定的时间。

问题是:我如何以这种方式保存这些数据,我没有11,000个对象存在于堆中,并且仍然能够将我需要的对象加载到应用程序中它正在运行?

1 个答案:

答案 0 :(得分:2)

我认为您最好的选择是将数据导出到数据库。

最简单的解决方案是SQLiteCoreData

我会选择CoreData,因为它可以节省大量的开发时间(你需要花一些时间来熟悉CoreData)。此外,它可能会解决与仅保留在内存中使用的对象有关的内存问题。

基本上,CoreData是一个对象图,这意味着它只允许您在需要时加载图形的一部分(对于SQLite商店类型)。

根据您的描述,您可以使用某种查询访问单个实体(包含20列的行),而无需加载文件中的所有实体。

CoreData的等价物是:
1)在核心数据中定义实体(一次,在模型设计者中)
2)创建CoreData堆栈(对于简单设计,这是自动生成的)
3)创建NSPredicate以选择您喜欢的实例 4)创建NSFetchRequest以定义对数据的访问权限 5)使用NSFetchedReaultsController在主要上下文上执行请求 6)显示结果

您可以创建一个使用核心数据的新项目,并查看其工作原理示例