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

时间:2011-02-14 04:57:53

标签: design-patterns core-data nspredicate

我正在编写一个使用核心数据作为其持久层的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用户可能会使用的。

感谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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