核心数据获取

时间:2013-04-20 22:27:14

标签: iphone ios objective-c core-data

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

例如,

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

您可以在搜索中添加谓词,以便仅获取符合特定条件的对象;它就像一个“if”语句来获取。这是Apple的文档:

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/

所有这一切,必要性实际上取决于你拿走了多少物体。如果它没有导致任何性能损失,那么获取一些不需要的对象并不一定有任何问题。换句话说,解决问题 - 不要“优化”工作正常的事情。但是,如果你的模型包含大量的对象,那么获取它们可能会很昂贵而且你会想要使用谓词。

答案 2 :(得分:0)

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