2015-10-05 64 views
0

我有2個實體(「Achievement」和「ShortTermGoal」),如屏幕截圖所示。從核心數據中的兩個不同實體獲取數據

我從成就實體獲取數據,其中

shortTermSubGoalId = "PROVIDED_ID" 

現在我想shortTermGoalNameShortTermGoal實體,其中在shortTermSubGoalId = "SAME_AS_PROVIDED_ABOVE"

我想NSManagedObject應包含成就實體和ShortTermGoal實體的所有數據shortTermGoalName(的NSManagedObject每個對象都會有「成就」 ShortTermGoal實體+ shortTermGoalName屬性的所有屬性)。

它有可能嗎? 如果是的話那怎麼樣?

請分享代碼片段。

成就實體

Achievement

ShortTermGoal實體

ShortTermGoal

回答

0

你只能拿到完全對應於特定的核心數據實體的NSManagedObject實例。他們不會將來自多個實體的屬性組合成單個實例。這只是Core Data無法像SQL一樣工作的一種方式 - 您不會獲取結果表格,而是直接獲取模型對象。

核心數據有不同的處理方式,通過您配置的關係。

如果您獲取Achievement的實例,您將獲得該實體的所有屬性。您還可以使用已有的shortTermGoal關係訪問相關ShortTermGoal實體的所有屬性。您可以在幾種方法之一獲得shortTermGoalName值:

  • 如果創建自定義NSManagedObject子類的實體,那麼如果你有一個Achievement

    let achievement : Achievement = // Created somewhere else 
    let name = achievement.shortTermGoal?.shortTermGoalName 
    
  • 如果你還沒有爲你的實體創建了自定義NSManagedObject子類,那麼如果你有一個NSManagedObject對應於Achievement,

    let achievement : NSManagedObject = // Created somewhere else 
    let name = achievement.valueForKeyPath("shortTermGoal.shortTermGoalName") 
    

請注意,這裏假設你有實際分配一個值shortTermGoal關係。

+0

我想獲得KeyPath「shortTermGoal.shortTermGoalName」的值,但我沒有得到任何價值。 –

+0

po obj。valueForKeyPath(「shortTermGoal.shortTermGoalName」) 無 –

+0

您是否曾爲關係設置過一個值?這就是我在答案的最後一行所說的 - 這隻有在您爲首次分配關係值時纔有效。 –