1

我有一个实体,我想获取某个属性。

例如,

假设我有一个名为 Food 的实体,具有多个属性。我想选择所有类别,这是每个食品的一个属性。在 Core Data 中实现这一目标的最佳方法是什么?

4

3 回答 3

1

只需运行您的获取请求,然后用于valueForKey:提取所有属性值。如果您的模型包含大量对象,您可以设置获取限制和偏移量(以及排序描述符)以对项目进行分页。执行此操作时,您还应该将获取请求设置为不将对象作为故障返回。

只记得有一个替代方案。您可以将属性设置为 fetch,然后将结果类型设置为 NSDictionaryResultType。您仍然需要进行迭代,但这将返回尽可能少的数据。

于 2013-04-20T22:35:22.220 回答
0

您只能获取整个对象,但您只能在获取请求中使用 nspredicate 获取具有特定属性的对象。请参阅代码片段部分中 Xcode 中的代码片段。在 find 字段中查找 fetch request 并使用 nspredicate 代码拖出代码段。您可以将谓词设置为仅查找满足此谓词的对象。希望这可以帮助!

于 2013-04-23T01:34:15.533 回答
0

编辑:我想我误解了你的问题。您似乎只想获取对象的属性,而不是对象本身(例如属性而不是实体)?我不相信核心数据会以这种方式工作……正如上面提到的那样,它是一个对象图而不是数据库。研究 Core Data 如何“出错”,在需要时自动检索依赖对象。我留下了下面的建议,以防它仍然适用,但我不确定它是否会适用。

您可以在搜索中添加谓词,以便仅获取满足特定条件的对象;它的工作方式类似于用于获取的“if”语句。这是苹果的文档:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/Reference/NSPredicate.html

还有一个教程: http ://www.peterfriese.de/using-nspredicate-to-filter-data/

话虽如此,必要性实际上取决于您要获取的对象数量。如果它没有造成任何性能损失,那么获取一些不需要的对象不一定有什么问题。换句话说,解决问题——不要“优化”那些运行良好的东西。但是,如果您的模型包含大量对象,那么获取所有对象可能会很昂贵,并且您可能希望使用谓词。

于 2013-04-20T23:12:18.400 回答