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

问题描述:

我正在编写一个使用核心数据作为其持久层的Mac应用程序,并且对搜索的“所有权”普遍一致性感到好奇。使用谓词搜索核心数据实体

假设我有一个名为Recipe的类(NSManagedObject的生成子类),我希望能够搜索例如“包含某种成分的食谱”,“可以喂食超过4人的食谱” , 等等。我可以设想类似的方法:

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

和实现知道如何构建一个合适的NSFetchRequest/NSPredicate去得到他们。问题是什么对象通常实现这些方法?在Java世界中,这些通常位于RecipeFactory的实例方法中。我也可以在Recipe类中看到类方法的情况。在一个Hello World应用程序(大多数教程似乎提供)中,逻辑直接嵌入在调用代码中,但是,我并不那么热衷于处理NSFetchRequests的样板代码,NSEntityDescriptions通过调用代码散布所有代码。我真的更喜欢将这个逻辑抽象出来,并允许一个更有意义的API(每个上面)来获取对象。

我倾向于食谱上的类方法(并使用类别实现,因此我不必修改生成的类),但希望将其抛出,并查看其他Core Data用户可能会使用哪些类。

谢谢。

使用类别。正如你所看到的,这使得Xcode生成的类不会受到影响,同时允许扩展托管对象类的功能。

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