2016-04-26 11 views
0

"ルーチン"というNSManagedObjectが既にデータモデルに保存されています。それは "ワークアウト"と呼ばれる別のNSManagedObjectと多対多の関係を持っています。私はそれに多くの運動関係を加えるためにルーチンを編集したいと思う。CoreDataはオブジェクトを複製しますか?

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

私は私のデータモデルでルーチンを編集するのViewControllerは、ワークアウトオブジェクトの配列が含まれています

var myWorkouts = [Workout]() 

「myWorkouts」アレイ内のトレーニングの一部はすでに日常的に関連付けられているされている可能性があり、他の人は持っていないかもしれない(新しい運動)。ルーチンワークアウトとの関係がすでに作成されている場合は上記のforループものの複製を作成し、:

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

私の質問:私はこのような各ワークアウトルーチンとの間の関係を作成します私のルーチンに関連付けるためのトレーニング、またはこれまでに関連のないトレーニングのための新しい関係を作成するだけですか?

私の質問が理にかなっていることを願います。助けを前にありがとう!

ルーチンCoreDataPropertiesだから

import Foundation 
import CoreData 

extension Routine { 

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

} 

enter image description here

答えて

2

ファイル、あなたは彼らが唯一、常に一度それぞれの値が含まれていることを意味し、Set秒で作業しています。したがって、囲むオブジェクト(この場合はNSManagedObject秒)にかかわらず、そこには1つしかありません。あなたは良いです - 関係が何も変わることはありません。

私はあなたがあなたの人生を容易にするために、物事のカップルを行うことができます、しかし、お勧めかもしれません:あなたはまだの場合は、Xcodeののツールで構築を使用して具象サブクラスを作成

  1. 、そうすることができます関係とプロパティに直接アクセスします。
  2. 具体的なサブクラス+NSManagedObjectPropertiesファイルでは、それらの多対多関係をNSSets?からSet<MyClass>?に再定義します。これにより、スウィフトネイティブ関数を呼び出すことができ、からSetが橋渡しされます。
  3. 今後は、routine.workout = workoutを呼び出してください。これは、コードで定義されている関係よりもはるかに明確です。
+1

私は既にステップ1を行っていますが、2と3は素晴らしい提案ですので、ありがとうございます!私はまだ関係を更新したり追加したりするのに慣れているので、説明に感謝します! :D – user3353890

+1

あなたは大歓迎です!そして、ステップ3では、一般に、物事を1対1の側に格納する呼び出しを行うために、それはずっとずっと穏やかです(そして私は最初にそれを後ろに持っています)。 – sschale

+0

驚くばかり!だから私が正しく理解すれば、私はちょうどルーチンの乱雑な混乱を変更する!.setvalue ... routine.workout = workoutに – user3353890

関連する問題