使用谓词搜索核心数据实体
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 库中也以相同的方式实现。
【讨论】:
以上是关于使用谓词搜索核心数据实体的主要内容,如果未能解决你的问题,请参考以下文章