2013-06-18 53 views
0

我正在使用核心數據將信息存儲在我正在構建的iPhone應用程序中。核心數據中的實體中的實體 - Xcode

我打算在甲板對象中存儲詞彙表對象,所以任何甲板對象都可以有多個詞彙表對象。

我想在我的詞彙實體中創建一個屬性「Deck ID」,並通過ID將詞彙卡與Decks相關聯。但是,我不知道這是不是好的做法?

有沒有更好的方式與Core Data關係做到這一點?據我所知,一個關係意味着甲板實體只會有一個詞彙表對象,也許我錯了。

如何纔能有效地構建一個適合我需求的核心數據結構?

謝謝。

回答

2

這是正確的方法。你不能在實體中「嵌入」實體。

如果你想有一個可以連有一個vocabulary實體的多個實例deck的實體,您需要創建獨立的實體deckvocabulary,並從您的deck添加一對多關係實體到您的vocabulary實體,以及從您的vocabulary實體返回到您的甲板實體的到一個關係。

這裏有一個基本的對實體的核心數據模型來證明這一點:

Relationship

正如你可以在圖片中看到,該Deck實體有一個名爲vocabulariesVocabulary一個一對多的關係實體,具有相反的關係deck

Deck實體的vocabularies關係被配置像這樣:

Relationship Configuration 1

並在Vocabulary實體deck關係被構造是這樣的:

Relationship Configuration 2

注意, vocabularies的關係是to-m任何,而deck關係不是。這意味着可以有多個詞彙用於一個Deck對象,但每個Vocabulary對象只能被連接到一個Deck對象。這種類型的關係通常被表示爲

Deck <---->> Vocabulary 

這是有意義的,你可以看到,這是與上述相同的連接兩個實體,表示關係的類型的圖像中的箭頭所示。

核心數據處於比直接與數據庫交互(它爲您服務)的更高層次,所以您實際上不需要將其視爲數據庫。將Core Data視爲對象圖而不是數據庫更容易,因爲它代表的是:對象集合,彼此相連,而不是一組必須手動連接的不相交表。

+0

非常感謝!這真的很有幫助。如果我爲甲板和詞彙創建類,我如何實例化或添加詞彙實體到特定的甲板?有沒有一種方法可以用來做到這一點? – yonatano

+1

@ Yoni201當你爲'Deck'創建一個類時,你會注意到它有一個名爲'vocabularies'的'NSSet'屬性,以及對象上的一個'CoreDataGeneratedAccessors'類別,你可以用它來添加和刪除對象從這一套,都是爲你做的。你不需要自己實現任何東西。 – Greg

+0

完美,謝謝! – yonatano

1

Core Data學習曲線的一部分就是停止對它的思考,就好像它是一個關係數據庫一樣。

最好把它看作是一個對象圖 - 對象連接在一起的方式,而不是通過標識符連接的表。

在你的情況,你應該做的是有一個甲板對象和詞彙對象,並建立像這樣的關係:

deck <-->> vocabulary 

(你會看到這個符號時,很多人談論的核心數據)

這意味着一個卡座對象與詞彙表對象具有一對多關係,並且詞彙表對象與卡座對象具有一對一的關係。在CD中有重要的關係。

如果以這種方式執行此操作,則不需要手動創建ID和連接對象的表,它將在內部爲您進行管理。您只需要添加和刪除關係中的對象。對於Vocabulary對象來說,這只是單一類型的對象,而對於這個套牌來說,它將成爲詞彙類型對象的集合。兩者之間的關係意味着如果你創建一個詞彙表對象並將它分配給一個套牌,那麼這個套餐對象會自動將這個詞彙表對象添加到它的詞彙表對象集中。