2013-08-28 40 views
2

假設我有一個具有數千個對象的實體A.這些對象中的每一個都與另一個實體B有一對多的關係。實體B的一個屬性是「section」。如何獲取所有對象的一對多關係B的所有屬性的NSSet A

我想B的所有不同部分的的NSSet實體A的所有對象

被我只想B的不同章節中的一個對象當中,我會用:

[A valueForKeyPath:@"B.section"]; 

但是有沒有一種有效的方式來獲得這個A的所有對象?在我看來,獲取A的所有對象,然後迭代這個數組,執行上述操作就是「太多工作了」。當然,這可以沒有太大的麻煩,但我希望我的核心數據天真只是意味着我不知道在一行中實現這一點的訣竅。

這怎麼辦?

謝謝!

編輯爲要求澄清:

假設一個人實體與一輛實體一對多的關係。 假設車輛實體具有「顏色」屬性。

我想爲屬於所有人的所有車輛使用所有顏色的NSSet。

+0

'[A valueForKeyPath:@ 「B.section」];'不會給你B的不同的部分,它會給你一個B. – memmons

+1

的所有部分,請澄清你的問題有點 - - 一世'我已經讀過它3倍,它仍然不清楚你在找什麼。你是否想要一個給定的A的所有B實體的集合在節中被單獨使用?你是否想要一組由唯一部分過濾的所有B實體? – memmons

回答

1

如果我理解正確,並假設甲 - >乙關係具有逆乙 - >命名爲a的關係,你的問題可以表述爲:所有不同值的B.section對關係B.a並非沒有。每個B將得到B.section的每個不同的值,這與A有關。

在這種情況下你想要的東西,如:

// Fetch B 
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"B"]; 
// Fetch B that's related to an A 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"a != nil"]; 
[request setPredicate:predicate]; 

// Fetch distinct values of "section", return values as NSDictionary 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctValues:YES]; 
[request setPropertiesToFetch:@["section"]]; 

執行這一點,你得到的NSDictionary陣列。該字典有一個名爲section的密鑰,它對應於B.section。只包括不同的值。

0

假設你有以下管理對象類:

@interface A: NSManagedObject 

@property (nonatomic, retain) NSSet *BSet; 

@end 

如果你有一個稱爲aObj一個實例,並要搶在B放置的所有對象具有獨特的部分,你會怎麼做以下內容:

NSArray *uniqueBSections = 
        [aObj valueForKeyPath:@"@distinctUnionOfObjects.BSet.section"]; 
+0

事實上,我認爲[aObj valueForKeyPath:@「B.section」]會做你所描述的。這與我想要的區別在於,我需要NSSet用於A的所有對象,而不僅僅是一個單一的aObj實例。儘管謝謝你的迴應! – OneManBand

相關問題