2016-09-07 46 views
0

我有一個多對多的關係爲好友談話。我試圖保存對話像這樣的哥們:Swift核心數據多對多不保存

let conversations = buddy.valueForKeyPath("conversations") as? NSMutableSet 
      conversations?.addObject(newConversation) 
CoreData.sharedInstance.saveContext() 

我的日誌告訴我,好友有一個談話,但我下次我運行應用程序,好友沒有一個談話的這創建一個新的。

我想這

@NSManaged func addConversationObject(conversation: Conversation) 

回答

0

我解釋這是是基於兩個不同的實體,好友和對話,其中一個哥們可以在多個會話每次我得到一個錯誤每個對話可以有多個參與者。如果是這樣的話,如果談話是新話題,你可以爲它創建記錄,並通過你定義的任何屬性鏈接他們(假設一個好友可以參與談話)。然後,創建會話和鏈接夥伴(比如buddy1)你會使用:

guard let newConversation = NSEntityDescription.insertNewObject(forEntityName: "Conversation", into: context) as? Conversation else 
{...damage control for the CoreData failure...} 

buddy1.participatingIn = newConversation 

在這一點上,你想也想設置你的會話記錄任何其他值。在另一方面,如果你要添加buddy1現有對話,你就會有或檢索與該對話(說的那樣conversation1)和鏈路buddy1:

buddy1.participatingIn = conversation1 

我希望適合你的設計/幫助。

+0

我爲新對話創建了一條記錄。它被保存了。 我在做這樣的: '如果好友.conversations .Count之間的== 0 { startNewConversationWithBuddies(哥們:哥們!]) }?' startNewConversation: '讓newConversation =對話。 createNewConversation(name:conversationName) 好友在好友{ let conversations = buddy.valueForKeyPath(「conversations」)as? NSMutableSet 對話?.addObject(newConversation) CoreData.sharedInstance.saveContext()' – Matak

+0

您確定addObject()函數嗎?我已經習慣了具有NSManagedObject子類產生拿起關係名稱如本例: 擴展WaypointSourceType { \t '@nonobjc類FUNC fetchRequest()... ... 屬性... ' @NSManaged VAR describesSource:NSSet中? } // MARK:生成describesSource 擴展WaypointSourceType存取{ '@objc(addDescribesSourceObject :) ' @NSManaged FUNC addToDescribesSource(_值:航點) ... 因此,在這種情況下,呼叫是: waypointSource?.addToDescribesSource(newWaypointSource) –

+0

Xcode沒有生成擴展......新的更新Xcode也生成擴展。現在工作正常。謝謝! – Matak