2017-01-21 67 views
0

所以我正在開發一個鍛鍊跟蹤器應用程序,我有一個實體有所有的練習和另一個將保存鍛鍊。我已經建立了兩者之間的多對多關係,因爲鍛鍊可以有很多鍛鍊,並且鍛鍊可以有很多鍛鍊。我子類我的實體,我一直在考慮這兩個變量...如何將數據存儲到CoreData中的多對多關係中?

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

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

而我就如何將數據寫入到他們困惑。我已經設置了所有練習的桌面視圖,當用戶選擇一個時,它會顯示一個複選標記。但我也希望它被保存到關係中。因此,當我稍後查詢數據以進行鍛鍊時,例如,我希望它向我顯示鍛鍊時的所有相關練習。任何幫助將不勝感激,謝謝。

+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中產生的方法來爲你添加和刪除一個或多個相關對象:

// 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

相關問題