2017-01-21 2 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) 

Обратная связь устанавливается Core Data автоматически, так:

exerciseInstance.workouts.contains(workoutInstance) 

теперь true.

Смежные вопросы