所以,我正在开发一个锻炼跟踪器应用程序,我有一个实体,其中包含所有练习,另一个实体可以保存锻炼。我已经建立了两者之间的多对多关系,因为锻炼可以有很多锻炼,锻炼可以有很多锻炼。我已经将我的实体分类,并且我已经获得了这两个变量......
// Workout Entity...
@NSManaged public var exercises: NSSet?
// Exercises Entity...
@NSManaged public var workouts: NSSet?
我对如何向他们写数据感到困惑。我已经设置了一个包含所有练习的tableview,当用户选择一个时,它会显示一个复选标记。但我也希望将它保存到关系中。因此,当我稍后查询数据以进行锻炼时,我希望它向我展示该锻炼的所有相关练习。非常感谢任何帮助,谢谢。
答案 0 :(得分: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()
}
答案 1 :(得分: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
。