2015-08-21 4 views
8

In Swift 2.0, sind One-to-Many-Beziehungen in Core Data noch NSOrderedSets?Swift 2.0 Eins-zu-viele-Beziehung - noch NSOrderedSet?

Ich kann nicht scheinen, in der Lage zu sein, richtig zu werfen/zu werfen, um überhaupt keine Fehler zu werfen.

Hat jemand in Swift 2.0 ein einfaches Beispiel dafür?

Antwort

1

Leider ist CoreData mit swift immer noch ein großer Schmerz vor allem bei geordneten Ein-Viele-Beziehungen. Ja, es ist immer noch NSOrderedSet, das von CoreData für viele Beziehungen verwendet wird. Die Frage ist, wie Sie Elemente hinzufügen/entfernen. Xcode war bisher noch nie in der Lage, Accessoren für die geordnete Menge zu erzeugen - sogar in Objective, geschweige denn Swift !!.

Es gibt diesen Thread zu-viele Beziehungen in Swift auf Sparend: How to define CoreData relationship in Swift?

Aber ach !, nichts in diesem Thread erwähnt jemals in Swift 2.0 Welt funktioniert. Was ist die Problemumgehung für jetzt? Ich habe mich damit beschäftigt, und die einzige Möglichkeit, dies zum Laufen zu bringen, besteht darin, die Quellen für fragliche Entitäten in Objective C und nicht in swift zu generieren und deren Header im Bridging-Header zu exportieren. Darüber hinaus müssen Sie sicherstellen, dass Sie eine wichtige Abhilfe Fix sind für Xcode, um eine ordnungsgemäße Zugriffsmethoden für geordnete Menge zu erzeugen:

https://github.com/CFKevinRef/KCOrderedAccessorFix

Sie sollten sicherstellen, model.kc_generateOrderedSetAccessors() in Ihrem Modellerstellung Code in AppDelegate auf der Call um diesen Fix aufzurufen.

Sobald dies erledigt ist, können Sie jetzt sicher starten, die generierten Accessoren in Ihrem Modell zu verwenden, um Elemente zu einer to-many-Beziehung hinzuzufügen.

Ich habe ein Beispielprojekt und ist in Github erstellt und hoffen, dass es

helps-

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

+1

Es stellt sich heraus, dass es in XCode 7 Beta 5 einfacher geworden ist. Core Data verwendet jetzt NSSet für Eins-zu-viele-Beziehungen. Erstellen Sie ein NSMutableSet wie "let clientSet: NSMutableSet = []", fügen Sie dann dem Set "clientsSet.addobject (aClientObject)" ein Core Data-Objekt hinzu und setzen Sie das Set dann in die Beziehung wie "event.clients = clientsSet" und Sie " Wieder getan. Ich musste nur meine Klassen regenerieren, die nicht funktionierten (wie mein Event). Ich benutzte immer noch einige Klassen, die von Core Data in XCode 7 Beta 4 generiert wurden und das brachte mich durcheinander (Event verwendete NSOrderedSet anstelle von NSSet). – Kent

+0

Oh, das ist großartig zu wissen, meins war Xcode 7, beta 4. – Shripada

4

Nur wenn Sie die Beziehung mit der Option Flag „bestellt“. Wenn nicht, dann ist es ein NSSet.

ich nicht mit der akzeptierten Antwort zustimmen, weil in Swift 2.0 von NSSet zu einem Set Überbrückung automatisch geschieht, wenn Sie also die Coredata Entität Unterklasse können, können Sie einfach schreiben:

@NSManaged var oneToManyOfTypeFoo: Set<Foo> 

Und dann das Hinzufügen und Entfernen von Elementen wird trivial, weil Sie einfach die Methoden insert und remove von Set verwenden können.

+0

Wenn Sie die bestellte Option ausgewählt haben, fügt Xcode automatisch NSOrderedSet anstelle von NSSet hinzu und Sie können nicht mit NSOrderedSet verwenden. Wie behandelt man die auftragsbezogenen Vorgänge mit Set ? Vielen Dank... – emreoktem

+1

'NSOrderedSet' ist eine andere Struktur und kann nicht in' Set' umgewandelt werden. Wie ich sehe, haben Sie zwei Möglichkeiten: Die erste besteht darin, bei "NSOrderedSet" zu bleiben, so dass meine Antwort für Sie irrelevant ist. Die andere Möglichkeit besteht darin, die geordnete Option abzuwählen und ein 'Set' zu verwenden. Dann können Sie es sortieren: 'myset.sorted (by:)' – FranMowinckel