【问题标题】:How to store data into a many-to-many relationship in CoreData?CoreData中如何将数据存储为多对多关系?
【发布时间】:2017-01-21 19:46:01
【问题描述】:

所以我正在开发一个锻炼跟踪器应用程序,我有一个实体包含所有锻炼,另一个实体将保存锻炼。我已经在两者之间建立了多对多的关系,因为一个锻炼可以有很多锻炼,一个锻炼可以有很多锻炼。我已经对我的实体进行了子类化,并获得了这两个变量......

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

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

我对如何向它们写入数据感到困惑。我已经设置了一个包含所有练习的表格视图,当用户选择一个时,它会显示一个复选标记。但我也希望它被保存到关系中。因此,当我稍后查询数据以进行锻炼时,例如,我希望它向我显示该锻炼的所有相关锻炼。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 你的目标 iOS 版本是什么?
  • IoS 10,最新。为什么?

标签: ios swift xcode core-data


【解决方案1】:

应该很容易。 我猜你有一个返回所有选择锻炼的函数,我称之为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()
}

【讨论】:

    【解决方案2】:

    假设您已经创建了锻炼/锻炼实体的实际实例,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      相关资源
      最近更新 更多