2015-08-21 55 views

回答

1

不幸的是CoreData與SWIFT仍然特別是有序一對多關係一個巨大的痛苦。是的,它仍然是由CoreData用於多對多關係的NSOrderedSet。問題是如何添加/刪除項目。到目前爲止,Xcode從未能夠爲有序集合正確生成訪問器 - 即使在Objective中,更不用說Swift !!。

有這個線程節約一對多關係,斯威夫特: How to define CoreData relationship in Swift?

但是,唉!在這個線程提及什麼事也沒工作在雨燕2.0的世界。那麼現在有什麼解決方法?我深入瞭解了這一點,唯一能夠實現這一目標的方法是在Objective C中爲實體生成源代碼,而不是在swift中生成源代碼,並在橋接頭文件中導出它們的頭文件。此外,你需要確保你包括重要的解決方法修復了Xcode中產生的有序集合正確存取:

https://github.com/CFKevinRef/KCOrderedAccessorFix

你應該確保呼叫 - model.kc_generateOrderedSetAccessors()中的AppDelegate模型創建代碼 調用此修復程序。

一旦這樣做,你現在可以安全地開始使用你的模型生成的訪問將項目添加到一個一對多的關係。

我創建了一個示例項目,並在github上,並希望它helps-

https://github.com/shripada/CoreDataToManyRelationshipInSwift2.0

+1

原來它的XCode中7測試版5.核心數據現在使用的NSSet一個一對多的關係變得簡單。創建一個NSMutableSet,如「let clientSet:NSMutableSet = []」,然後將Core Data對象添加到集合「clientsSet.addobject(aClientObject)」中,然後將該集合放入關係中,如「event.clients = clientsSet」重做。我所要做的就是重新生成不工作的類(如我的事件)。我仍然使用從XCode 7 beta 4中的Core Data生成的一些類,這讓我感到困惑(事件使用的是NSOrderedSet而不是NSSet)。 – Kent

+0

哦,那是偉大的知道,我的是Xcode的7 beta 4版本 – Shripada

4

只有當你標誌和「有序」選項的關係。如果不是,那麼這是一個NSSet

我不接受的答案同意,因爲在雨燕2.0從NSSet橋到Set自動發生,所以,如果你也可以繼承的CoreData實體,你可以這樣寫:

@NSManaged var oneToManyOfTypeFoo: Set<Foo> 

,然後加並刪除元素變得微不足道,因爲您可以使用Set中的insertremove方法。

+0

當你選擇了訂購選項的Xcode自動添加NSOrderedSet而不是NSSet中,你不能用NSOrderedSet使用。如何使用Set 處理訂單相關操作?謝謝... – emreoktem

+1

'NSOrderedSet'是一個不同的結構,不能轉換爲'Set'。正如我看到你有兩個選擇:第一個是堅持'NSOrderedSet',所以我的答案與你無關。另一個是取消選擇訂購的選項並使用「Set」。然後你可以對它進行排序:'myset.sorted(by:)' – FranMowinckel