2017-01-21 6 views
0

私はワークアウトトラッカーアプリケーションを開発しています。すべてのエクササイズを持つエンティティとワークアウトを保存したエンティティがあります。私は、ワークアウトが多くのエクササイズを持ち、エクササイズが多くのエクササイズを持つことができるように、2人の間に多対多の関係を設定しました。私は私のエンティティをサブクラス化していると私は、これら2つの変数を与えてきた...CoreDataの多対多関係にデータを格納する方法は?

// Workout Entity... 
@NSManaged public var exercises: NSSet? 

// Exercises Entity... 
@NSManaged public var workouts: NSSet? 

、私は彼らにデータを書き込む方法について混乱しています。私はすべての演習でテーブルビューをセットアップし、ユーザーが1つを選択するとチェックマークが表示されます。しかし、私はまたそれが関係に救われることを望みます。そのため、後でトレーニングのためにデータをクエリすると、たとえば、そのトレーニングに関連するすべての練習問題が表示されます。どんな助けでも大変感謝します。

+0

対象のiOSバージョンはどれですか? – shallowThought

+0

最新のIoS 10。どうして? –

答えて

0

非常に簡単です。 私はあなたがすべての選択ワークアウトを返す関数を持っていると思います。私はそれをselectedExercises()と呼んでいます。それぞれのエクササイズプロパティをワークアウトプロパティと結びつけるだけで、もちろんエクササイズごとにエクササイズプロパティを接続する必要があります。 あなたのために、

let context = ...// your context 

guard let workout = NSEntityDescription.insertNewObject(forEntityName: "Workout", into: context) as? Workout else { 
    fatalError() 
} 

let exercises = selectedExercises() //func returning an NSSet 
let workoutsSet = NSSet(object: workout) 

for exercise in exercises { 
    guard let exercise = exercise as? Exercise else { fatalError() } 
    exercise.workouts = workoutsSet 
} 

workout.exercises = exercises 

do { 
    try context.save() 
} catch { 
    fatalError() 
} 
0

すでにあなたのトレーニング/エクササイズエンティティの実際のインスタンスを作成していると仮定すると、Xcodeの追加およびあなたのための1つまたは複数の関連するオブジェクトを削除するためのメソッドを生成します。

// MARK: Generated accessors for exercises 
extension WorkoutEntity { 

    @objc(addExercisesObject:) 
    @NSManaged public func addToExercises(_ value: ManagedEmotionCategory) 

    @objc(removeExercisesObject:) 
    @NSManaged public func removeFromExercises(_ value: ManagedEmotionCategory) 

    @objc(addExercises:) 
    @NSManaged public func addToExercises(_ values: NSSet) 

    @objc(removeExercises:) 
    @NSManaged public func removeFromExercises(_ values: NSSet) 

} 

あなたは、既存の上でそれらを使用することができますインスタンス:

workoutInstance.addToExercises(exerciseInstance) 

逆の関係はそう、自動的にコアデータによって設定されます。

exerciseInstance.workouts.contains(workoutInstance) 

は今trueです。

関連する問題