使用谓词搜索核心数据实体

Posted

技术标签:

【中文标题】使用谓词搜索核心数据实体【英文标题】:Searching Core Data entities using predicates 【发布时间】:2011-02-14 04:57:53 【问题描述】:

我正在编写一个使用 Core Data 作为其持久层的 Mac 应用程序,我很好奇对于搜索“所有权”的普遍共识是什么。

假设我有一个名为 Recipe 的类(生成的 NSManagedObject 的子类),我希望能够搜索“包含某种成分的食谱”、“可以养活 4 人以上的食谱”、等等。我可以设想这样的方法:

-(NSArray *)fetchRecipesContaining:(Ingredient *)ingredient;
-(NSArray *)fetchRecipesFeedingMorePeopleThan:(int)count;

并且实现知道如何构造一个合适的 NSFetchRequest/NSPredicate 去获取它们。问题是什么对象通常实现这些方法?在 Java 世界中,这些通常存在于 RecipeFactory 的实例方法中。我还可以在 Recipe 类中看到类方法的案例。

在 Hello World 应用程序(大多数教程似乎都提供)中,逻辑直接嵌入在调用代码中,但是,我并不热衷于将处理 NSFetchRequests 和 NSEntityDescriptions 的样板代码分散在整个调用代码中。我真的更愿意将这些逻辑抽象出来,并允许使用更有意义的 API(如上所述)来获取对象。

我倾向于使用 Recipe 上的类方法(并使用类别实现,这样我就不必修改生成的类),但想把它扔出去,看看其他 Core Data 用户可能会使用什么。

谢谢。

【问题讨论】:

【参考方案1】:

使用类别。正如您所注意到的,这使 Xcode 生成的类保持不变,同时允许您扩展托管对象类的功能。

【讨论】:

【参考方案2】:

我正在使用带有类方法的方法。我不确定它是否好,但还没有遇到任何问题。也从 Ruby on Rails 来到 Cocoa/CoreData 并使用它的 ActiveRecord - 这样做似乎是合乎逻辑的,因为它在 ActiveRecord 库中也以相同的方式实现。

【讨论】:

以上是关于使用谓词搜索核心数据实体的主要内容,如果未能解决你的问题,请参考以下文章

xCode / iOS - 需要帮助使核心数据搜索谓词工作

核心数据和谓词

All 子句核心数据谓词未按预期工作

子查询谓词核心数据

核心数据:返回另一个实体的对象的谓词

我无法根据与谓词的关系从核心数据中获取实体