2014-02-13 49 views
2

我有這樣一個模型:iOS的核心數據如何從不同的實體訪問單一實體

enter image description here

如何讓這個「文件」的實體可以通過ENTITY1或ENTITY2引用(或項目)

基本上我有一些「文件」與ID的。如果對「文件」進行更改(例如更改名稱),則當任何實體引用該文件時,它應該具有更新的信息...而不必在每個實體中進行更新。

有沒有辦法從編輯器做到這一點?或者,我必須編寫代碼才能首先獲取我正在查找的文件ID,然後一旦有了文件ID,就使用我剛剛獲得的ID爲「文件」實體單獨請求?

在sql中,我可以只是從任何表進行左連接。如果可以在謂詞中做,那也可以,但不知道如何。

編輯:

所以我更新我的模型,現在它看起來像這樣:

enter image description here

我添加數據的 「文件」,然後添加數據ENTITY1和ENTITY2

我有用於顯示文件的代碼,然後顯示實體的代碼。 下面是我在做什麼的一個片段:

NSEntityDescription *entityDescription = [NSEntityDescription 
              entityForName:@"Entity1" inManagedObjectContext:context]; 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:entityDescription]; 

NSError *error; 
NSArray *entityArray = [context executeFetchRequest:request error:&error]; 

[entityArray enumerateObjectsUsingBlock:^(Entity1 *entity1, NSUInteger idx, BOOL *stop) { 
    NSLog(@"entity1: %@", entity1.name); 
}]; 

我現在該如何從文件中得到「名」的ENTITY1?讓我們假裝名稱字段是一個匹配的字段。我需要添加哪些代碼才能拉取「文件」?這是假設「文件」在「Entity1」之前在那裏。

我目前正在運行另一種類似於「getFileByName:(NSString *)name」的方法,並使用謂詞做單獨的請求。這有效,但我認爲有一個更好的方法。

+0

你是什麼「的意思,使‘文件’實體可以被引用實體1,實體2或物品'? –

+0

我想如果我與Entity1的文件建立關係,那麼我將無法從entity2訪問相同的文件。我會嘗試丹的回答,看看它是否有效。感謝您檢查了這一點。 – Amos

+0

你的編輯完全是另一個問題。考慮重新發佈一個。 –

回答

4

您可以簡單地爲任何其他喜歡引用它們的實體(具有您所希望的基數)創建與Files實體的關係。

請記住,雖然Filesid是唯一的,CoreData提供的唯一性是objectID ==>您可以用id替換文件objectID並獲得相同的功能。

幾點建議:

  1. 不使用id作爲屬性名稱,它是在Objective-C
  2. 保留字不名的複數形式的實體(例如。 Files - >File),他們是對象的定義或類(不認爲在表方面,雖然這可能是底層結構)
+0

因此,我可以創建從entity1到文件的一對多關係,以及從entity2到entity1中使用的相同文件實體的一對多關係? (我會在等待的時候嘗試它)..並感謝對象id提示,這裏的問題是id從外部源獲取,並可能在某些時候更新,這是我的鏈接回到服務器數據。 – Amos

+0

@Amos然後在代碼中將它們更改爲'identifier'。你**不能**使用'id'。這是一個保留字,**會引起你的問題。 –

+0

@Dan我正在嘗試one-> one關係到「文件」實體,並會看到這是否工作......感謝您的建議,這個例子比我實際工作要簡單得多。有趣的是,你提出了「複數」的名稱問題,我實際上剛剛完成更改所有實體名稱,然後再回過頭來檢查此帖,因爲它在代碼中看起來不正確。我確實有幾個地方有「id」,所以我會改變這些。也感謝marcus – Amos