2012-03-15 89 views
2

我有一個設立在那裏的兩個對象是由許多相關的許多關係目標C核心數據保存多對多關係

藝術家< < ---- >>事件

即藝術家可以參加許多活動。一個事件可以有很多藝術家參加

所以我明白,如果關係是一對多藝術家說< --- >>事件,那麼我可以創建事件對象,並指定藝術家對象的關係。

但是,既然兩端都是多對多的,我該如何拯救這種關係呢?目前,我試圖先保存事件對象,然後將藝術家對象放入NSSet中,並將該集合分配給藝術家nsset的事件指針。

但是,當我回去查詢event.artists,我得到0

所以,你怎麼許多保存到核心數據一對多的關係?

回答

2

每當我有許多關係需要的很多,我將其更改爲兩個一到多的關係是這樣的:

  1. 創建一個新的實體,例如ArtistEvent
  2. 添加一個由藝術家許多關係到ArtistEvent Artist <--->> ArtistEvent
  3. 添加一個從事件許多關係到ArtistEvent ArtistEvent <<---> Event

你的總體框圖如下:

Artist <--->> ArtistEvent <<---> Event 

現在,爲了創建藝術家和事件之間的新關係,您只需創建一個新的ArtistEvent並將其藝術家屬性設置爲藝術家及其事件屬性。

如果您想查找(說)藝術家將參加的所有活動的詳細信息,這會增加額外的間接水平,但這對改善關係正常化是值得的。

0

爲描述創建「事件」實體並添加關係(爲了一致性和清晰起見)建立對象圖的適當關係的最佳方式稱爲「藝術家」,其將具有「到-many「連接(你將在Xcode的數據模型檢查器中設置);

然後,創建一個名爲「藝術家」的實體,並以「一對多」關係類似地創建一個名爲「events」的關係。

現在,在Xcode的模型編輯器中,選擇「Event」實體並設置其「藝術家」關係的連接,在「Destination」下指向實體「Artist」。 對「藝術家」實體執行相同操作,並將其「事件」關係設置爲指向「事件」。確保也設置反轉(即,將「藝術家」設置爲「事件」的反轉,將「事件」設置爲「藝術家」的反轉)。

現在,「events」是包含「Artist」實體的集合,而「artists」是包含「Event」實體的集合。但是這些集合是不可變的。

要在「藝術家」實體添加到「藝術家」設置,首先創建一個可變的代理設置這樣

NSManagedObject *someEvent = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:context]; 
NSManagedObject *newArtist = [NSEntityDescription insertNewObjectForEntityForName:@"Artist" inManagedObjectContext:context]; 

NSMutableSet *artistMutableSet = [Event mutableSetValueForKey:@"artists"]; 
[artistsMutableSet addObject:newArtist]; 

要在「事件」實體添加到「事件」集,你做相反。