2016-04-26 12 views
0

Ich habe ein NSManagedObject namens "Routine", das bereits in meinem Datenmodell gespeichert wurde. Es hat eine To-Viele-Beziehung zu einem anderen NSManagedObject namens "Workout". Ich möchte die Routine bearbeiten, um ihr weitere Trainingsbeziehungen hinzuzufügen.Kopiert CoreData Objekte?

let routine = fetchedResultsController.objectAtIndexPath(indexPath) as! Routine 

Der Viewcontroller, wo ich die Routine in meinem Datenmodell bearbeiten eine Reihe von Trainings-Objekten enthalten:

var myWorkouts = [Workout]() 

Einige der Übungen in dem „myWorkouts“ Array kann schon mit Routine in Verbindung gebracht wurde, während andere möglicherweise nicht (ein neues Training) haben. Ich erstelle eine Beziehung zwischen jedem Training und die Routine wie folgt aus:

for workout in myWorkouts { 
    routine!.setValue(NSSet(objects: workout), forKey: "workout") 
} 

Meine Frage: Wenn eine Beziehung zwischen einer Routine und einem Workout bereits erstellt wurde, wird die oben for-Schleife ein Duplikat davon erstellen Workout, um mit meiner Routine zu assoziieren, oder wird es nur neue Beziehungen für zuvor nicht assoziierte Workouts erstellen?

Ich hoffe meine Fragen ergeben Sinn. Vielen Dank im Voraus für die Hilfe!

Routine CoreDataProperties Datei

import Foundation 
import CoreData 

extension Routine { 

    @NSManaged var name: String? 
    @NSManaged var workout: Set<Workout>? 

} 

enter image description here

Antwort

2

Also, sind Sie mit Set s arbeiten, was bedeutet, dass sie nur immer jeden Wert einmal enthalten. Daher wird, unabhängig von den umgebenden Objekten (in diesem Fall s), nur eins dort sein. Du bist gut - die Beziehung neu zu definieren wird nichts ändern.

ich könnte jedoch vorschlagen, dass Sie ein paar Dinge tun können, um Ihr Leben leichter zu machen:

  1. Wenn Sie nicht bereits, erstellen Sie die konkreten Subklassen mit Xcode integrierten Tools, so können Sie direkten Zugriff auf Beziehungen und Eigenschaften.
  2. In der konkreten Unterklassen +NSManagedObjectProperties Datei, definieren Sie diese to-viele Beziehungen von NSSets? zu Set<MyClass>?. Dadurch können Sie Swift-native Funktionen aufrufen und korrekt arbeiten, da Set von überbrückt wird.
  3. In der Zukunft rufen Sie einfach routine.workout = workout, die viel klarer ist als die Art, wie Ihr Code die Beziehung definiert.
+1

Ich habe bereits Schritt 1, aber 2 und 3 sind fantastische Vorschläge, also vielen Dank! Ich bin immer noch daran gewöhnt, mit dem Aktualisieren und Hinzufügen von Beziehungen zu arbeiten, also schätze ich die Erklärung! : D – user3353890

+1

Gern geschehen! Und in Schritt 3 ist es im Allgemeinen immer viel vernünftiger (und ich habe es beim ersten Mal rückwärts geschafft), Anrufe zu tätigen, um Dinge auf der Eins-Seite zu speichern. – sschale

+0

Super! Also, wenn ich richtig verstehe, ändere ich einfach das verzerrte Chaos der Routine! .setvalue ... to routine.workout = workout – user3353890