2010-10-07 57 views
0

所以我有典型的1:M關係:核心數據,結果中過濾掉子實體設置

Car can have many Models 

我想以「A」開頭的車對象,只有型號名稱。

我嘗試了子查詢:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Car" inManagedObjectContext:_context]; 
[fetchRequest setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(models, $model, $model.name BEGINSWITH 'A')[email protected] > 0"];  
[fetchRequest setPredicate:predicate]; 

這將基本上返回Car,只要它具有與 'A' 開頭的模型。這很好,但所有那些Car s返回,它也返回所有Model s,我只想要那些以'A'開頭的那些

但是,似乎只要我操作更高級別的實體(Car ),那麼子查詢只會過濾Cars,根本不會過濾Models

我現在正在做的是在內循環中過濾Models(使用另一個NSPredicate),但我寧願在SQL端進行這種過濾。

想法?

回答

1

運行中的抓取對Models實體與謂詞:

[NSPredicate predicateWithFormat:@"name BEGINSWITH 'A'"]; 

從結果數組,NSArray *result,你可以用KVC得到所有的Cars的:

[result valueForKey:@"car"]; 

假設你有1 :1的逆關係爲1:M CarsModels的關係(順便說一下,您應該採用反向關係來維護對象圖的一致性)。

如果你只想要一套獨特的Cars

[result valueForKeyPath:@"@distinctUnionOfObjects.car"]; 

NSSet *cars = [NSSet setWithArray:[result valueForKey:@"car"]]; 
+0

是啊,這件事情我到達。先通過Models入門,然後找回汽車。我喜歡你的KVC方法。 謝謝! – Maverick 2010-10-07 23:16:27