0

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

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

4

1 回答 1

2

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

最简单的解决方案是SQLiteCoreData

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

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

根据您的描述,您有一个实体(有 20 列的行),您希望使用某种查询访问它而不加载文件中的所有实体。

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

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

于 2013-04-27T18:19:59.523 回答