2013-03-21 88 views
0

我在使用CoreData關係有誤解。使用關係瞭解CoreData

我從我的SQL的時間記住的(很久以前......)我要補充和ID每個表,這將是進入這使表之間的關係。

下面是我的CoreData(實體)中我的表的外觀概述。

Epro_Sheet是我的主表,其他必須與那一個有關。

什麼我想要做的是:

  • 用戶在其上有自己的實體一個UIViewController(EPro_CompanyViewController)填充字段EPro_Company
  • 然後,當他按未來 - 創造EPro_Sheet,增加idSheet和填寫其他條目 - 此外,EPro_Company填充了EPro_CompanyViewController的字段文本。
  • 那麼用戶將填補領域的EPro_DaFroidViewController,然後當他按下旁邊往裏面實體EPro_DaFroid獲得當前EPro_Sheet的電流Id並將其設置爲EPro_DaFroid ...
  • 等....
  • 將會有一個UIViewController(歷史),它允許用戶檢索特定日期的所有信息,以編輯它或顯示它。

你能幫助我在路上怎麼做嗎?關係還是根本不存在......如果存在關係,我如何使用NSPredicateFormat檢索信息:從日期@「....」中檢索所有信息;

非常感謝您的幫助!

enter image description here

+1

您的*特定*問題是什麼? – mvp 2013-03-21 10:03:57

+0

是的。正如MVP所說,解釋你的查詢簡短而明確,那麼只有你會得到快速的迴應。 – Ganapathy 2013-03-21 11:08:23

回答

1

你要明白,核心數據不是關係數據庫和主鍵等的概念是不存在的第一個。它由你來執行。這個更多細節可以在這裏找到:

Core-data vs RDBMS

這裏

The differences between Core Data and a Database

如果你想實現核心數據的關係,你必須創建核心 - 的關係數據模型。想象一下,你有這樣的關係:

學生< - >>科

即一個學生屬於一個部分,一個部分可以有很多學生。然後在您的核心數據模型中,您可以定義一個從學生到部分的一對一關係(如oneSection),以及另一個從部門到學生的關係(如manyStudents),它是一對多的關係。然後你將關係設定爲彼此之間的反比關係。

雖然我們將其聲明爲關係,但它幾乎充當託管對象的屬性。

所以,如果你有一個管理的對象稱爲studObj1studObj2Student實體),那麼你這樣的關係設置爲一個部分對象(sectionObj):

(假設你將創建一個管理對象子類)

Student *studObj1= <create object> 
Student *studObj2= <create object> 

Section *sectionObj = <create object> 

//set one-to-one relationship 
studObj1.oneSection = sectionObj; 
studObj2.oneSection = sectionObj; 

//set one-to-many relationship; 

NSSet *studSet = [NSSet setWithObjects:studObj1,studObj2,nil]; 
sectionObj.manyStudents = studSet; 

關於謂語就可以直接使用的關係的性質: 即。如果您想根據部分獲得學生,可以創建如下謂詞:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"oneSection.name like 'MainSection'"];