2011-05-02 42 views
0

我對ObjC很有經驗,但是對於Core Data來說還是比較新的。到目前爲止,這是非常簡單的,但我有點卡住了關係,所以我希望有人能指出我的方向。如何從Core Data中的關係相關實體獲取屬性?

我有兩個實體:一個是人員列表,另一個是事件列表。

我已經在兩個實體之間的數據模型中建立了一種反比關係(稱爲「人物」),其中人物一側設置爲「一對多」。換句話說,我可以有5個人,但有數千個事件;每個事件都與一個人綁在一起,但一個人可能會對任何事件負責。

我使用[NSEntityDescription insertNewObjectForEntityForName ...]添加事件,然後用NSFetchedResultsController檢索它們。

問題是,我還沒有成功地獲取有關某人在獲取特定事件對象時的數據。例如:

Log *logEntry = [_fetchedResultsController objectAtIndexPath:indexPath]; 

// this works: 

NSLog(@"description: %@", logEntry.description); 
NSLog(@"happened %i minutes ago", -[logEntry.date timeIntervalSinceNow]/60); 

// this does not (just spits out NULL): 

NSLog(@"person responsible: %@", logEntry.people.name); 

我錯過了什麼?我如何獲得關係中的人的數據?我有一種感覺,在首先添加日誌條目時忽略了一個重要鏈接,或者在檢索日誌條目時可能需要一個謂詞。當涉及到關係和具體的例子時,蘋果的文檔有點不足。在這裏,我可能仍然會把我的頭卡在老派的SQL中,所以我真的可以使用一些幫助。謝謝!

回答

2

如果人是多個人,那麼它會作爲一個集合返回 - 因此logEntry.people會返回一個NSSet的人,您必須循環才能離開People並因此能夠請求人。

與多個對象的任何關係都被建模爲一組(當前在iOS中)。

+0

感謝您的回覆。如上所述,一個事件應該與一個人綁在一起。如果只有一條記錄,logEntry.people是否作爲NSSet返回?順便說一句,我已經嘗試過這一點,但是當我將它作爲NSSet投射時,該設置是空的。我懷疑有一個缺少謂詞,或者我錯誤地插入了記錄。還有什麼想法? – cetcet 2011-05-02 21:08:06

+0

如果你在一個人身上設置了一個事件的反向關係,還應該設置一個事件。你聲稱只有一個人是可能的,但如果是這樣的話,爲什麼這種關係被命名爲「人」 - 對我來說,表明這種關係是多對多的。 – 2011-05-02 23:11:21

+0

爲了與應用程序的其他部分保持一致,我們稱之爲「人」,並將其與「人」區分開來,我用它來識別「人」實體中的單個記錄。由於我收到的數據是空的,我認爲要麼提取請求不好,要麼數據不完整。如果沒有比我已經包含的更多東西,那麼數據一定是壞的。我不明白的是,我應該如何將單一事件與人員實體中的單個人聯繫起來。 – cetcet 2011-05-03 06:19:31

相關問題