2016-05-12 139 views
0

Swift Core Data多對多關係,你如何保存關係。Swift核心數據多對多關係

讓假設有2個實體事件和會員,一個事件可以有相關的許多成員和成員可以有許多事件......

所以

事件< < - >>會員

關係

活動 - 活動 - 會員 會員 - 會員 - 活動

你會如何保存這種關係?

回答

1

你不必任何代碼,建立實體的事件和會員的好友:)之間的關係

您可以打開核心數據模型,選擇事件實體,按住控制並拖動鼠標成員實體: )的關係會立即建立:)

現在選擇的關係,它來自兩個事件改變了許多許多會員(多到許多關係)和成員事件(反向關係):)

現在在Event和Member實體中適當地命名這些關係:)

像許多在事件一對多的關係被命名爲involves_Members和會員實體相同的關係將被命名爲involvedin_Events :)

現在,當您生成兩個實體的模型類,你會發現

Events.h 

有一個屬性名爲involves_Members這將是類型的NSSet

並且類似地

`Members.h` 

有一個屬性名爲involvedin_Events這將是NSSet類型以及:)

現在假設,如果你想添加的成員活動的所有你需要做的是

創建一個成員對象

[context performBlock:^{ 

    Member *member = (Member *)[NSEntityDescription insertNewObjectForEntityForName:@"Member" inManagedObjectContext:context]; 
    [member setValue:@"yourValue" forKey:@"yourkey"]; 
    //after populating it with appropriate value set the relationship with event :) 
    //get the event to which you want to set the relationship with member using NSFetchRequest :) 

    //assuming you have event object with you 
    NSMutableSet *involvedMembers = [event mutableSetValueForKey:@"involves_Members"]; 
    [involvedMembers addObject:member]; 

    [event setValue:involvedMembers forKey:@"involves_Members"]; 

    //thats it you are done now 
    //save the context now :) 
    NSError *error; 
    [context save:&error]; 
}]; 

而且當你要訪問所有參與成員和事件的所有你需要做的就是用NSFecthRequest獲得事件對象:),一旦你有事件對象,你可以通過訪問其所有成員,

NSArray *membersArray = [event.involves_Members allObjects]; 

OR

NSArray *membersArray = [event valueForKey:@"involves_Members"]; 

就是這樣:)同樣的事情適用於成員enity以及:)

TIP

你不想刪除操作弄亂你的核心數據:)因此,選擇關係involves_Membersinvolvedin_Events和d設置刪除規則抵消

希望我做我的觀點明確:)快樂編碼好友:)

+0

謝謝您的明確答覆。你有快捷版嗎? – kupilot

+0

@ kupilot:抱歉的哥們沒有imac與我現在會嘗試明天提供你的代碼:)但將此轉換爲swift應該是一個問題:)這是一個鏈接,我相信你可能已經看到它:)如果不是看看它:) https://www.raywenderlich.com/14742/core-data-on-ios-5-tutorial-how-to-work-with-relations-and-predicates我提到的一切都非常清楚地解釋並在迅速:)希望它可以幫助你:) –