2011-06-29 86 views
1

在我的核心數據對象模型中,我有3個具有適當關係的實體,以便MyObject可以有很多MyObjectProperties,每個屬性可以有一個MyObjectPropertyImage。核心數據:謂詞中的對象

給定一個myObject我想獲取所有的圖像。

我嘗試使用以下斷言它做,但我得到一個空數組:

[NSEntityDescription entityForName:@"MyObjectPropertyImage" inManagedObjectContext:managedObjectContext]; 
[NSPredicate predicateWithFormat:@"ANY myObjectProperty.myObject == %@", myObject]; 

任何想法?

回答

2

使用核心數據時,最好將您的實體視爲:對象圖中的實體,而不是數據庫中的表。因此,您不需要使用謂詞來獲取與其他人相關的實體。相反,使用模型中定義的關係導航對象圖。要獲得所有相關myObject圖像:

// assuming the relationships are called 'myObjectProperties' and 'myObjectPropertyImage', respectively 
NSSet *allImages = [myObject.myObjectProperties valueForKey:@"myObjectPropertyImage"]; 

注意,這可能會引發更多的旅行數據庫中,如果您的對象圖不加載到內存中爲您myObject實體。爲了避免這種情況,請確保在您的獲取請求中爲myObject設置預取關係keypath。

我希望這有助於...

+0

謝謝,這樣做的工作,是的,我仍然不得不放棄我的頭腦中的「數據庫思維」.. :) – Gytis

0

既然你手上有MyObject實例,它有myObjectProperties-->ObjectProperty-->>PropertyImages你只需要遍歷關係的關係路徑。這很容易與valueForKeyPath:

正是如此做到這一點:

NSArray *images=[myObjectInstances valueForKeyPath:@"myObjectProperties.propertyImage"]; 

(注:我可能有你的屬性名稱錯了,但你能得到的想法)

作爲一般規則,你永遠不取時有可用的圖表中的對象。您可以獲取與謂詞匹配的對象的「挑選線索」,然後查找跟隨相關對象的線索/關係的所有相關對象。

+0

謝謝你的一般規則!這就是爲什麼我認爲在謂詞中放置一個託管對象沒有什麼意義 – Gytis