2011-02-14 128 views
0

我正在編寫一個使用核心數據作爲其持久層的Mac應用程序,並且對搜索的「所有權」普遍一致性感到好奇。使用謂詞搜索核心數據實體

假設我有一個名爲Recipe的類(NSManagedObject的生成子類),我希望能夠搜索例如「包含某種成分的食譜」,「可以餵食超過4人的食譜」 , 等等。我可以設想類似的方法:

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

和實現知道如何構建一個合適的NSFetchRequest/NSPredicate去得到他們。問題是什麼對象通常實現這些方法?在Java世界中,這些通常位於RecipeFactory的實例方法中。我也可以在Recipe類中看到類方法的情況。在一個Hello World應用程序(大多數教程似乎提供)中,邏輯直接嵌入在調用代碼中,但是,我並不那麼熱衷於處理NSFetchRequests的樣板代碼,NSEntityDescriptions通過調用代碼散佈所有代碼。我真的更喜歡將這個邏輯抽象出來,並允許一個更有意義的API(每個上面)來獲取對象。

我傾向於食譜上的類方法(並使用類別實現,因此我不必修改生成的類),但希望將其拋出,並查看其他Core Data用戶可能會使用哪些類。

謝謝。

回答

0

使用類別。正如你所看到的,這使得Xcode生成的類不會受到影響,同時允許擴展託管對象類的功能。

0

我正在使用類方法的方法。我不確定它是否好,但還沒有遇到任何問題。另外,來自Ruby on Rails的Cocoa/CoreData以及它的ActiveRecord--這似乎是合乎邏輯的,因爲它在ActiveRecord庫中也以相同的方式實現。