2016-04-26 1 views
0

J'ai un NSManagedObject appelé "Routine", qui a déjà été enregistré dans mon modèle de données. Il a une relation to-many à un autre NSManagedObject appelé "Workout". Je veux éditer la routine afin d'y ajouter plus de relations d'entraînement.CoreData dupliquera-t-il les objets?

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

Le ViewController où je modifier le routine dans mon modèle de données contient un tableau d'objets d'entraînement:

var myWorkouts = [Workout]() 

Certains des séances d'entraînement dans le tableau « de myWorkouts » peuvent avoir déjà été associé à la routine, tandis que d'autres ne peuvent pas avoir (une nouvelle séance d'entraînement). Je crée une relation entre chaque séance d'entraînement et la routine comme ceci:

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

Ma question: Si une relation entre une routine et une séance d'entraînement a déjà été créé, sera ci-dessus pour boucle créer une copie de cette entraînement à associer à ma routine, ou va-t-il seulement créer de nouvelles relations pour des entraînements non associés auparavant?

J'espère que mes questions ont un sens. Merci d'avance pour l'aide!

CoreDataProperties de routine du fichier

import Foundation 
import CoreData 

extension Routine { 

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

} 

enter image description here

Répondre

2

Alors, vous travaillez avec Set s, ce qui signifie qu'ils ne contiennent toujours chaque valeur une fois. Par conséquent, quels que soient les objets englobants (dans ce cas, NSManagedObject s), il n'y en aura qu'un. Vous êtes bon - re-affirmant que la relation ne changera rien.

je pourrais suggérer, cependant, que vous pouvez faire quelques choses pour rendre votre vie plus facile:

  1. Si vous ne l'avez pas déjà fait, créez construit de sous-classes concrètes en utilisant Xcode dans les outils, afin que vous puissiez accéder directement aux relations et aux propriétés.
  2. Dans les sous-classes de béton +NSManagedObjectProperties, redéfinissez ces relations de NSSets? à Set<MyClass>?. Cela vous permet d'appeler des fonctions natives Swift, et fonctionne correctement, car Set est ponté de NSSet.
  3. Dans l'avenir, appelez simplement routine.workout = workout, ce qui est beaucoup plus clair que la définition de votre relation par le code.
+1

J'ai déjà fait l'étape 1, mais 2 et 3 sont des suggestions fantastiques alors merci beaucoup! Je m'habitue toujours à travailler avec la mise à jour et l'ajout de relations, alors j'apprécie l'explication! : D – user3353890

+1

De rien! Et, à l'étape 3, en général, c'est toujours beaucoup plus sain (et je l'ai eu en arrière la première fois), pour faire des appels pour stocker des choses sur le côté à un. – sschale

+0

Génial! Donc, si je comprends bien, je change juste le désordre brouillé de la routine! .setvalue ... en routine.workout = workout – user3353890