【发布时间】:2022-12-06 05:31:32
【问题描述】:
我有一个由 3 个实体设置的核心数据模型:Exercise、ExerciseSet 和 Workout。它的设置使 Exercise 和 ExerciseSet 具有一对一的关系,而 Workout 和 ExerciseSet 具有一对多的关系。我正在尝试通过 Workout 访问 ExerciseSet 中的属性,但是当我运行此代码时:
struct WorkoutView: View {
@State var workout = Workout()
var body: some View {
Text("Sets in Workout: \(workout.exerciseSets.count)")
ForEach(Array(arrayLiteral: workout.exerciseSets), id: \.self) { e in
Text("Exercise Name: \(e.exercise.exercisename), Reps: \(e.reps), Weight: \(e.weight)")
}
我收到以下错误
Value of type 'NSSet' has no member 'exercise'
Value of type 'NSSet' has no member 'reps'
Value of type 'NSSet' has no member 'weight'
当我在锻炼之外调用它们并且 workout.exerciseSets.count 按预期返回时,这些属性都存在。
以下是每个实体的定义:
extension Exercise {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Exercise> {
return NSFetchRequest<Exercise>(entityName: "Exercise")
}
@NSManaged public var exercisename: String
@NSManaged public var id: UUID?
@NSManaged public var musclegroup: String?
@NSManaged public var exerciseSet: ExerciseSet?
}
extension Exercise : Identifiable {
}
extension ExerciseSet {
@nonobjc public class func fetchRequest() -> NSFetchRequest<ExerciseSet> {
return NSFetchRequest<ExerciseSet>(entityName: "ExerciseSet")
}
@NSManaged public var dateCompleted: Date
@NSManaged public var id: UUID?
@NSManaged public var reps: Int16
@NSManaged public var weight: Int16
@NSManaged public var exercise: Exercise
@NSManaged public var workout: Workout?
}
extension ExerciseSet : Identifiable {
}
extension Workout {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Workout> {
return NSFetchRequest<Workout>(entityName: "Workout")
}
@NSManaged public var id: UUID
@NSManaged public var notes: String?
@NSManaged public var workoutDate: Date
@NSManaged public var workoutMuscleGroup: String?
@NSManaged public var workoutName: String?
@NSManaged public var exerciseSets: NSSet
public var exerciseSetArray: [ExerciseSet] {
let set = exerciseSets as? Set<ExerciseSet> ?? []
return set.sorted {
$0.dateCompleted < $1.dateCompleted
}
}
}
// MARK: Generated accessors for exerciseSets
extension Workout {
@objc(addExerciseSetsObject:)
@NSManaged public func addToExerciseSets(_ value: ExerciseSet)
@objc(removeExerciseSetsObject:)
@NSManaged public func removeFromExerciseSets(_ value: ExerciseSet)
@objc(addExerciseSets:)
@NSManaged public func addToExerciseSets(_ values: NSSet)
@objc(removeExerciseSets:)
@NSManaged public func removeFromExerciseSets(_ values: NSSet)
}
extension Workout : Identifiable {
}
为了能够通过 Workout 访问 ExerciseSet 中的属性,我是否缺少某些东西?谢谢你。
【问题讨论】:
标签: xcode swiftui core-data nsset