如何为非常大的Core Data数据库创建快速搜索类型的机制?

时间:2012-04-13 08:08:03

标签: iphone database search core-data nsdictionary

我正在尝试实现一种快速搜索即用型机制。

在我目前的实现中,当用户第一次启动应用程序时,他必须等待一点下载过程才能完成。在此期间,正在下载有关该应用程序销售的20,000种产品的信息。每个产品都由NSManagedObject的实例表示,并添加到Core Data数据库中。

真正的问题是使用这些产品的方式。用户再次启动应用程序(不是第一次)后,需要将产品加载到内存中,以便快速搜索。 为了做到这一点,我遍历整个数据库并为包含其信息的每个产品创建一个NSDictionary实例,因为在我的程序中使用字典对象来检索有关产品的信息要容易得多。

因为字典存储在内存中,因此搜索过程非常快,但迭代20,000个对象(每次启动的onces)并创建字典需要花费大量时间(大约一分钟),因此解决方案不是好。

我想到了达到快速搜索目标的另一种方法:在输入每个字母后从数据库中获取对象。但我不知道会有多快。

建议的方法是什么?

谢谢, Sagiftw

1 个答案:

答案 0 :(得分:2)

我的应用程序中有类似的功能,但记录相当少。我在所有搜索字段上都有索引,并从输入中创建尽可能简单(廉价)的sql查询(NSPredicate)(仅用于搜索的第二个fetchedResultsController)。结果集包含“搜索项”。这对于大约1000个条目(测试数据大小)至少足够快,具有随机分布的文本类型搜索关键字。在后台获取可能是一个好主意,以防止gui无响应。