2010-10-15 153 views
2

我有一個非常簡單的問題,我敢肯定有一個簡單的解決方案,但搜索2天上網後,我無法找到任何東西=(iPhone核心數據實體查找

這裏的情況:我已決定將我的數據分成兩個具有一對一關係的Sperate實體,因此我擁有PERSON實體和FEATURES實體,每個PERSON都有一個相關的FEATURES實體,person_id指向PERSON,

那麼如何從與特定人員相關的特徵中獲取數據?我還沒有發現任何與關係id有關的謂詞

只有我能想到的事情是創造設有PERSON_NAME屬性,然後做到這一點: predicateWithFormat:@「PERSON_NAME =‘比爾’」

,但不會是打敗建立關係的目的是什麼?

那麼如何基於關係獲取?

回答

3

這聽起來像你來自關係數據庫的背景。您應該將FEATURE與PERSON之間的關係存儲在關係中,而不是屬性(您可能已經這樣做了,但您的命名person_id讓我感到疑惑;標準核心數據約定將命名關係person及其逆feature)。假定是這種情況,就可以使用像

NSManagedObject *person ... //the person instance you want to search against 
NSPredicate *p = [NSPredicate predicateWithFormat:@"self.person == %@", person]; 

當然謂詞格式,你應該定義的反比關係(PERSON => FEATURE),在該情況下,你可以做

NSManagedObject *feature = person.feature; 

假設你將這種關係命名爲feature。核心數據使用反向關係來維護對象圖的一致性。他們的存儲是最小的,並且獲得這些存儲的好處很重要;沒有確實是的好理由,你應該總是爲核心數據模型中的所有關係定義反向關係。

+0

感謝您的答覆,但我仍然沒有得到它:( 我能夠得到Person實體就好使用這一行: NSManagedObject *人= [fetchedResultsController objectAtIndexPath:indexPath]; 從在那裏,我可以很容易地取出與PERSON相關的任何屬性,但是對於我來說,我無法弄清楚如何訪問與給定人相關的FEATURE實體。 .feature,但我得到錯誤 也試過NSPredicate * p = [NSPredicate predicateWithFormat:@「self.person ==%@」,person];但它給出了一個「無法識別的選擇器」 – user477338 2010-10-19 18:04:20

+0

我也不確定它應該是self.person還是self.PERSON – user477338 2010-10-19 18:05:51

1

好吧我想我想通了。當我創建實體對象時,我需要明確地設置關係ID,而我並沒有這樣做。我認爲核心數據在某種程度上是在幕後管理的。

[features setValue:personObject forKey:@「features」];