是否有可能只提取核心数据查询中选定的属性

我有(我猜)典型的问题。 我的核心数据数据库包含表,其中有BLOB字段和相当长的文本字段。

通常我不需要加载这些大尺寸的字段。 由于数据库中有数千条logging,我宁愿只取数据。 换句话说,我想使“SELECT name,id FROM TAB_NAME”查询,而不是“SELECT * FROM TAB_NAME”查询。

有没有办法只使用核心数据提取选定的字段? 或者我应该寻找其他的select,例如,把大的字段分隔到另一个表格上? 也许有更好(更简单)的方法来做到这一点?

我习惯于使用Hibernate或者JPA,在上面的操作中很容易做到,在通过Core Data docs之后,我没有看到这样的选项。

换句话说,我想使“SELECT name,id FROM TAB_NAME”查询,而不是“SELECT * FROM TAB_NAME”查询。

这个问题的答案已被接受,但是仅供参考,以下是如何只取得具有Core Data的实体的特定属性,而不重新考虑您的模型:

// build your NSFetchRequest // ... [request setResultType:NSDictionaryResultType]; [request setPropertiesToFetch: [NSArray arrayWithObjects:@"property1", @"property2", /* etc. */ nil]]; 

另请参阅NSFetchRequest的文档。

我认为在这种情况下,您可能希望将较大的字段(您宁愿不加载的字段)保留在单独的实体上,并为此创build1:1的关系。 这样,即使你错了你的对象,你只会获取“更轻”的属性,并获取更重的,你会使用的关系。

核心数据已经以错误的forms进行了“延迟加载”:当需要时,错误只从存储中提取数据,从而减less内存和性能开销。 另请阅读核心数据性能文档以获取更多信息:

BLOB通常表示实体的属性 – 例如,照片可能是Employee实体的属性。 对于小到中等大小的BLOB(和CLOB),应该为数据创build一个单独的实体,并创build一对一的关系来代替该属性。 例如,您可以使用它们之间的一对一关系创build员工和照片实体,从员工到照片的关系将replace员工的照片属性。 这种模式最大限度地提高了对象断层的好处(参见“断层和断层”)。 任何给定的照片只有在实际需要的情况下才能被检索(如果关系被遍历)。