我有一个Cocoa Mac应用程序,通过CoreData将搜索字段和集合视图绑定到一个sqlite表。该表包含几十万条带有按名称索引的文本字段(名称,地点,...)的记录。我在搜索字段绑定中使用BEGINSWITH谓词来选择十几个记录以在集合视图中显示。一切工作正常,但问题是,CoreData在第一个查询请求中将整个表加载到内存中,然后才进行必要的记录过滤以显示,这意味着用户需要相当长的时间。CoreData和大表
有没有办法设置CoreData,使整个表不会加载到内存中?理想情况下,我只想从搜索字段中每个查询的字母排序记录的范围中提取前100个项目。
一些建议。您没有“通过CoreData绑定到sqlite表的集合视图。”核心数据不是SQL。实体不是表格。对象不是行。属性不是列。关系不是连接。核心数据是一个对象图管理系统,它可能会或可能不会持久化对象图,并且可能会或可能不会在后台使用SQL来做到这一点。试图用SQL语言来思考核心数据会导致你完全误解核心数据,并导致很多悲伤和浪费时间。 – TechZen 2011-05-02 20:34:04
是什么让你认为“CoreData在第一个查询中将整个表加载到内存中?”?核心数据不能像那样工作。你只是假设,因为该应用程序很慢? – TechZen 2011-05-02 20:34:38
@TechZen:我明白你的观点。我的问题是,我的微不足道的应用程序在启动时很慢。我想通过将一些调试日志记录放入一个NSArrayController fetchWithRequest方法覆盖,并发现在第一个请求时整个表确实被加载到数组控制器中,但我只想显示前100个记录我的收藏视图。我是Cocoa的新手,我很确定这只是一个不恰当的设置问题。我很欣赏任何可以指引我朝着正确方向的暗示。 – mschuster 2011-05-03 14:09:34